home *** CD-ROM | disk | FTP | other *** search
- #! /bin/sh
- :
- # sanity.sh -- a growing testsuite for cvs.
- #
- # Copyright (C) 1992, 1993 Cygnus Support
- #
- # Original Author: K. Richard Pixley
-
- # usage: sanity.sh [-r] @var{cvs-to-test} @var{tests-to-run}
- # -r means to test remote instead of local cvs.
- # @var{tests-to-run} are the names of the tests to run; if omitted run all
- # tests.
-
- # See TODO list at end of file.
-
- # required to make this script work properly.
- unset CVSREAD
-
- TESTDIR=/tmp/cvs-sanity
-
- # "debugger"
- #set -x
-
- echo 'This test should produce no other output than this line, and a final "OK".'
-
- if test x"$1" = x"-r"; then
- shift
- remote=yes
- else
- remote=no
- fi
-
- # The --keep option will eventually cause all the tests to leave around the
- # contents of the /tmp directory; right now only some implement it. Not
- # useful if you are running more than one test.
- # FIXME: need some real option parsing so this doesn't depend on the order
- # in which they are specified.
- if test x"$1" = x"--keep"; then
- shift
- keep=yes
- else
- keep=no
- fi
-
- # Use full path for CVS executable, so that CVS_SERVER gets set properly
- # for remote.
- case $1 in
- /*)
- testcvs=$1
- ;;
- *)
- testcvs=`pwd`/$1
- ;;
- esac
-
- shift
-
- # Regexp to match what CVS will call itself in output that it prints.
- # FIXME: we don't properly quote this--if the name contains . we'll
- # just spuriously match a few things; if the name contains other regexp
- # special characters we are probably in big trouble.
- PROG=`basename ${testcvs}`
-
- # FIXME: try things (what things? checkins?) without -m.
- #
- # Some of these tests are written to expect -Q. But testing with
- # -Q is kind of bogus, it is not the way users actually use CVS (usually).
- # So new tests probably should invoke ${testcvs} directly, rather than ${CVS}.
- # and then they've obviously got to do something with the output....
- #
- CVS="${testcvs} -Q"
-
- LOGFILE=`pwd`/check.log
-
- # Save the previous log in case the person running the tests decides
- # they want to look at it. The extension ".plog" is chosen for consistency
- # with dejagnu.
- if test -f check.log; then
- mv check.log check.plog
- fi
-
- # That we should have to do this is total bogosity, but GNU expr
- # version 1.9.4 uses the emacs definition of "$" instead of the unix
- # (e.g. SunOS 4.1.3 expr) one. Rumor has it this will be fixed in the
- # next release of GNU expr after 1.12 (but we still have to cater to the old
- # ones for some time because they are in many linux distributions).
- ENDANCHOR="$"
- if expr 'abc
- def' : 'abc$' >/dev/null; then
- ENDANCHOR='\'\'
- fi
-
- # Work around another GNU expr (version 1.10) bug/incompatibility.
- # "." doesn't appear to match a newline (it does with SunOS 4.1.3 expr).
- # Note that the workaround is not a complete equivalent of .* because
- # the first parenthesized expression in the regexp must match something
- # in order for expr to return a successful exit status.
- # Rumor has it this will be fixed in the
- # next release of GNU expr after 1.12 (but we still have to cater to the old
- # ones for some time because they are in many linux distributions).
- DOTSTAR='.*'
- if expr 'abc
- def' : "a${DOTSTAR}f" >/dev/null; then
- : good, it works
- else
- DOTSTAR='\(.\|
- \)*'
- fi
-
- # Work around yet another GNU expr (version 1.10) bug/incompatibility.
- # "+" is a special character, yet for unix expr (e.g. SunOS 4.1.3)
- # it is not. I doubt that POSIX allows us to use \+ and assume it means
- # (non-special) +, so here is another workaround
- # Rumor has it this will be fixed in the
- # next release of GNU expr after 1.12 (but we still have to cater to the old
- # ones for some time because they are in many linux distributions).
- PLUS='+'
- if expr 'a +b' : "a ${PLUS}b" >/dev/null; then
- : good, it works
- else
- PLUS='\+'
- fi
-
- # Likewise, for ?
- QUESTION='?'
- if expr 'a?b' : "a${QUESTION}b" >/dev/null; then
- : good, it works
- else
- QUESTION='\?'
- fi
-
- # Cause NextStep 3.3 users to lose in a more graceful fashion.
- if expr 'abc
- def' : 'abc
- def' >/dev/null; then
- : good, it works
- else
- echo 'Running these tests requires an "expr" program that can handle'
- echo 'multi-line patterns. Make sure that such an expr (GNU, or many but'
- echo 'not all vendor-supplied versions) is in your path.'
- exit 1
- fi
-
- # Warn SunOS, SysVr3.2, etc., users that they may be partially losing
- if expr 'a
- b' : 'a
- c' >/dev/null; then
- echo 'Warning: you are using a version of expr which does not correctly'
- echo 'match multi-line patterns. Some tests may spuriously pass.'
- echo 'You may wish to make sure GNU expr is in your path.'
- else
- : good, it works
- fi
-
- pass ()
- {
- echo "PASS: $1" >>${LOGFILE}
- }
-
- fail ()
- {
- echo "FAIL: $1" | tee -a ${LOGFILE}
- # This way the tester can go and see what remnants were left
- exit 1
- }
-
- # See dotest and dotest_fail for explanation (this is the parts
- # of the implementation common to the two).
- dotest_internal ()
- {
- # expr can't distinguish between "zero characters matched" and "no match",
- # so special-case it.
- if test -z "$3"; then
- if test -s ${TESTDIR}/dotest.tmp; then
- echo "** expected: " >>${LOGFILE}
- echo "$3" >>${LOGFILE}
- echo "** got: " >>${LOGFILE}
- cat ${TESTDIR}/dotest.tmp >>${LOGFILE}
- fail "$1"
- else
- cat ${TESTDIR}/dotest.tmp >>${LOGFILE}
- pass "$1"
- fi
- else
- if expr "`cat ${TESTDIR}/dotest.tmp`" : \
- "$3"${ENDANCHOR} >/dev/null; then
- cat ${TESTDIR}/dotest.tmp >>${LOGFILE}
- pass "$1"
- else
- if test x"$4" != x; then
- if expr "`cat ${TESTDIR}/dotest.tmp`" : \
- "$4"${ENDANCHOR} >/dev/null; then
- cat ${TESTDIR}/dotest.tmp >>${LOGFILE}
- pass "$1"
- else
- echo "** expected: " >>${LOGFILE}
- echo "$3" >>${LOGFILE}
- echo "** or: " >>${LOGFILE}
- echo "$4" >>${LOGFILE}
- echo "** got: " >>${LOGFILE}
- cat ${TESTDIR}/dotest.tmp >>${LOGFILE}
- fail "$1"
- fi
- else
- echo "** expected: " >>${LOGFILE}
- echo "$3" >>${LOGFILE}
- echo "** got: " >>${LOGFILE}
- cat ${TESTDIR}/dotest.tmp >>${LOGFILE}
- fail "$1"
- fi
- fi
- fi
- }
-
- # Usage:
- # dotest TESTNAME COMMAND OUTPUT [OUTPUT2]
- # TESTNAME is the name used in the log to identify the test.
- # COMMAND is the command to run; for the test to pass, it exits with
- # exitstatus zero.
- # OUTPUT is a regexp which is compared against the output (stdout and
- # stderr combined) from the test. It is anchored to the start and end
- # of the output, so should start or end with ".*" if that is what is desired.
- # Trailing newlines are stripped from the command's actual output before
- # matching against OUTPUT.
- # If OUTPUT2 is specified and the output matches it, then it is also
- # a pass (partial workaround for the fact that some versions of expr
- # lack \|).
- dotest ()
- {
- if $2 >${TESTDIR}/dotest.tmp 2>&1; then
- : so far so good
- else
- status=$?
- cat ${TESTDIR}/dotest.tmp >>${LOGFILE}
- echo "exit status was $status" >>${LOGFILE}
- fail "$1"
- fi
- dotest_internal "$@"
- }
-
- # Like dotest except exitstatus should be nonzero.
- dotest_fail ()
- {
- if $2 >${TESTDIR}/dotest.tmp 2>&1; then
- status=$?
- cat ${TESTDIR}/dotest.tmp >>${LOGFILE}
- echo "exit status was $status" >>${LOGFILE}
- fail "$1"
- else
- : so far so good
- fi
- dotest_internal "$@"
- }
-
- # Like dotest except second argument is the required exitstatus.
- dotest_status ()
- {
- $3 >${TESTDIR}/dotest.tmp 2>&1
- status=$?
- if test "$status" = "$2"; then
- : so far so good
- else
- cat ${TESTDIR}/dotest.tmp >>${LOGFILE}
- echo "exit status was $status; expected $2" >>${LOGFILE}
- fail "$1"
- fi
- dotest_internal "$1" "$3" "$4" "$5"
- }
-
- # clean any old remnants
- rm -rf ${TESTDIR}
- mkdir ${TESTDIR}
- cd ${TESTDIR}
-
- # Avoid picking up any stray .cvsrc, etc., from the user running the tests
- mkdir home
- HOME=${TESTDIR}/home; export HOME
-
- # Remaining arguments are the names of tests to run.
- #
- # The testsuite is broken up into (hopefully manageably-sized)
- # independently runnable tests, so that one can quickly get a result
- # from a cvs or testsuite change, and to facilitate understanding the
- # tests.
-
- if test x"$*" = x; then
- tests="basica basic1 deep basic2 death branches import new conflicts modules mflag errmsg1 devcom ignore binfiles info"
- else
- tests="$*"
- fi
-
- # this should die
- if ${CVS} -d `pwd`/cvsroot co cvs-sanity 2>> ${LOGFILE} ; then
- echo "FAIL: test 1" | tee -a ${LOGFILE}
- exit 1
- else
- echo "PASS: test 1" >>${LOGFILE}
- fi
-
- # this should still die
- mkdir cvsroot
- if ${CVS} -d `pwd`/cvsroot co cvs-sanity 2>> ${LOGFILE} ; then
- echo "FAIL: test 2" | tee -a ${LOGFILE}
- exit 1
- else
- echo "PASS: test 2" >>${LOGFILE}
- fi
-
- # this should still die
- mkdir cvsroot/CVSROOT
- if ${CVS} -d `pwd`/cvsroot co cvs-sanity 2>> ${LOGFILE} ; then
- echo "FAIL: test 3" | tee -a ${LOGFILE}
- exit 1
- else
- echo "PASS: test 3" >>${LOGFILE}
- fi
-
- # This one should work, although it should spit a warning.
- mkdir tmp ; cd tmp
- ${CVS} -d `pwd`/../cvsroot co CVSROOT 2>> ${LOGFILE}
- cd .. ; rm -rf tmp
-
- # set up a minimal modules file...
- # (now that mkmodules is gone, this doesn't test -i the way it
- # used to. In fact, it looks like a noop to me).
- echo "CVSROOT CVSROOT" > cvsroot/CVSROOT/modules
- # The following line stolen from cvsinit.sh. FIXME: create our
- # repository via cvsinit.sh; that way we test it too.
- (cd cvsroot/CVSROOT; ci -q -u -t/dev/null \
- -m'initial checkin of modules' modules)
-
- # This one should succeed. No warnings.
- mkdir tmp ; cd tmp
- if ${CVS} -d `pwd`/../cvsroot co CVSROOT ; then
- echo "PASS: test 4" >>${LOGFILE}
- else
- echo "FAIL: test 4" | tee -a ${LOGFILE}
- exit 1
- fi
-
- if echo "yes" | ${CVS} -d `pwd`/../cvsroot release -d CVSROOT ; then
- echo "PASS: test 4.5" >>${LOGFILE}
- else
- echo "FAIL: test 4.5" | tee -a ${LOGFILE}
- exit 1
- fi
- # this had better be empty
- cd ..; rmdir tmp
- dotest_fail 4.75 "test -d tmp" ''
-
- # a simple function to compare directory contents
- #
- # BTW, I don't care any more -- if you don't have a /bin/sh that handles
- # shell functions, well get one.
- #
- # Returns: ISDIFF := true|false
- #
- directory_cmp ()
- {
- OLDPWD=`pwd`
- DIR_1=$1
- DIR_2=$2
- ISDIFF=false
-
- cd $DIR_1
- find . -print | fgrep -v /CVS | sort > /tmp/dc$$d1
-
- # go back where we were to avoid symlink hell...
- cd $OLDPWD
- cd $DIR_2
- find . -print | fgrep -v /CVS | sort > /tmp/dc$$d2
-
- if diff /tmp/dc$$d1 /tmp/dc$$d2 >/dev/null 2>&1
- then
- :
- else
- ISDIFF=true
- return
- fi
- cd $OLDPWD
- while read a
- do
- if [ -f $DIR_1/"$a" ] ; then
- cmp -s $DIR_1/"$a" $DIR_2/"$a"
- if [ $? -ne 0 ] ; then
- ISDIFF=true
- fi
- fi
- done < /tmp/dc$$d1
- ### FIXME:
- ### rm -f /tmp/dc$$*
- }
-
- # so much for the setup. Let's try something harder.
-
- # Try setting CVSROOT so we don't have to worry about it anymore. (now that
- # we've tested -d cvsroot.)
- CVSROOT_DIRNAME=${TESTDIR}/cvsroot
- CVSROOT=${CVSROOT_DIRNAME} ; export CVSROOT
- if test "x$remote" = xyes; then
- CVSROOT=`hostname`:${CVSROOT_DIRNAME} ; export CVSROOT
- # Use rsh so we can test it without having to muck with inetd or anything
- # like that. Also needed to get CVS_SERVER to work.
- CVS_CLIENT_PORT=-1; export CVS_CLIENT_PORT
- CVS_SERVER=${testcvs}; export CVS_SERVER
- fi
-
- # start keeping history
- touch ${CVSROOT_DIRNAME}/CVSROOT/history
-
- ### The big loop
- for what in $tests; do
- case $what in
- basica)
- # Similar in spirit to some of the basic1, and basic2
- # tests, but hopefully a lot faster. Also tests operating on
- # files two directories down *without* operating on the parent dirs.
-
- # Using mkdir in the repository is used throughout these
- # tests to create a top-level directory. I think instead it
- # should be:
- # cvs co -l .
- # mkdir first-dir
- # cvs add first-dir
- # but currently that works only for local CVS, not remote.
- mkdir ${CVSROOT_DIRNAME}/first-dir
- dotest basica-1 "${testcvs} -q co first-dir" ''
- cd first-dir
-
- # Test a few operations, to ensure they gracefully do
- # nothing in an empty directory.
- dotest basica-1a0 "${testcvs} -q update" ''
- dotest basica-1a1 "${testcvs} -q diff -c" ''
- dotest basica-1a2 "${testcvs} -q status" ''
-
- mkdir sdir
- dotest basica-2 "${testcvs} add sdir" \
- 'Directory /tmp/cvs-sanity/cvsroot/first-dir/sdir added to the repository'
- cd sdir
- mkdir ssdir
- dotest basica-3 "${testcvs} add ssdir" \
- 'Directory /tmp/cvs-sanity/cvsroot/first-dir/sdir/ssdir added to the repository'
- cd ssdir
- echo ssfile >ssfile
-
- # Trying to commit it without a "cvs add" should be an error.
- # The "use `cvs add' to create an entry" message is the one
- # that I consider to be more correct, but local cvs prints the
- # "nothing known" message and noone has gotten around to fixing it.
- dotest_fail basica-notadded "${testcvs} -q ci ssfile" \
- "${PROG} [a-z]*: use "'`cvs add'\'' to create an entry for ssfile
- '"${PROG}"' \[[a-z]* aborted\]: correct above errors first!' \
- "${PROG}"' [a-z]*: nothing known about `ssfile'\''
- '"${PROG}"' \[[a-z]* aborted\]: correct above errors first!'
-
- dotest basica-4 "${testcvs} add ssfile" \
- "${PROG}"' [a-z]*: scheduling file `ssfile'\'' for addition
- '"${PROG}"' [a-z]*: use '\''cvs commit'\'' to add this file permanently'
- dotest_fail basica-4a "${testcvs} tag tag0 ssfile" \
- "${PROG} [a-z]*: nothing known about ssfile
- ${PROG} "'\[[a-z]* aborted\]: correct the above errors first!'
- cd ../..
- dotest basica-5 "${testcvs} -q ci -m add-it" \
- 'RCS file: /tmp/cvs-sanity/cvsroot/first-dir/sdir/ssdir/ssfile,v
- done
- Checking in sdir/ssdir/ssfile;
- /tmp/cvs-sanity/cvsroot/first-dir/sdir/ssdir/ssfile,v <-- ssfile
- initial revision: 1.1
- done'
- dotest_fail basica-5a \
- "${testcvs} -q tag BASE sdir/ssdir/ssfile" \
- "${PROG} [a-z]*: Attempt to add reserved tag name BASE
- ${PROG} \[[a-z]* aborted\]: failed to set tag BASE to revision 1.1 in /tmp/cvs-sanity/cvsroot/first-dir/sdir/ssdir/ssfile,v"
- dotest basica-5b "${testcvs} -q tag NOT_RESERVED" \
- 'T sdir/ssdir/ssfile'
-
- dotest basica-6 "${testcvs} -q update" ''
- echo "ssfile line 2" >>sdir/ssdir/ssfile
- dotest_status basica-6.2 1 "${testcvs} -q diff -c" \
- 'Index: sdir/ssdir/ssfile
- ===================================================================
- RCS file: /tmp/cvs-sanity/cvsroot/first-dir/sdir/ssdir/ssfile,v
- retrieving revision 1\.1
- diff -c -r1\.1 ssfile
- \*\*\* ssfile [0-9/]* [0-9:]* 1\.1
- --- ssfile [0-9/]* [0-9:]*
- \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
- \*\*\* 1 \*\*\*\*
- --- 1,2 ----
- ssfile
- '"${PLUS} ssfile line 2"
- dotest basica-7 "${testcvs} -q ci -m modify-it" \
- 'Checking in sdir/ssdir/ssfile;
- /tmp/cvs-sanity/cvsroot/first-dir/sdir/ssdir/ssfile,v <-- ssfile
- new revision: 1.2; previous revision: 1.1
- done'
- dotest_fail basica-nonexist "${testcvs} -q ci nonexist" \
- "${PROG}"' [a-z]*: nothing known about `nonexist'\''
- '"${PROG}"' \[[a-z]* aborted\]: correct above errors first!'
- dotest basica-8 "${testcvs} -q update" ''
- dotest_fail basica-9 \
- "${testcvs} -q -d /tmp/cvs-sanity/nonexist update" \
- "${PROG}: .*/tmp/cvs-sanity/cvsroot value for CVS Root found in CVS/Root
- ${PROG}"': does not match command line -d /tmp/cvs-sanity/nonexist setting
- '"${PROG}"': you may wish to try the cvs command again without the -d option '
-
- dotest basica-10 "${testcvs} annotate" \
- 'Annotations for sdir/ssdir/ssfile
- \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
- 1.1 .[a-z@][a-z@ ]* [0-9a-zA-Z-]*.: ssfile
- 1.2 .[a-z@][a-z@ ]* [0-9a-zA-Z-]*.: ssfile line 2'
- cd ..
-
- rm -rf ${CVSROOT_DIRNAME}/first-dir
- rm -r first-dir
- ;;
-
- basic1) # first dive - add a files, first singly, then in a group.
- mkdir ${CVSROOT_DIRNAME}/first-dir
- # check out an empty directory
- if ${CVS} co first-dir ; then
- echo "PASS: test 13a" >>${LOGFILE}
- else
- echo "FAIL: test 13a" | tee -a ${LOGFILE}; exit 1
- fi
-
- cd first-dir
- files=first-file
- for i in a b ; do
- for j in ${files} ; do
- echo $j > $j
- done
-
- for do in add rm ; do
- for j in ${do} "commit -m test" ; do
- # ${do}
- if ${CVS} $j ${files} >> ${LOGFILE} 2>&1; then
- echo "PASS: test 14-${do}-$j" >>${LOGFILE}
- else
- echo "FAIL: test 14-${do}-$j" | tee -a ${LOGFILE}; exit 1
- fi
-
- # update it.
- if [ "${do}" = "rm" -a "$j" != "commit -m test" ] || ${CVS} update ${files} ; then
- echo "PASS: test 15-${do}-$j" >>${LOGFILE}
- else
- echo "FAIL: test 15-${do}-$j" | tee -a ${LOGFILE}; exit 1
- fi
-
- # update all.
- if ${CVS} update ; then
- echo "PASS: test 16-${do}-$j" >>${LOGFILE}
- else
- echo "FAIL: test 16-${do}-$j" | tee -a ${LOGFILE}; exit 1
- fi
-
- # status all.
- if ${CVS} status >> ${LOGFILE}; then
- echo "PASS: test 17-${do}-$j" >>${LOGFILE}
- else
- echo "FAIL: test 17-${do}-$j" | tee -a ${LOGFILE}; exit 1
- fi
-
- # FIXME: this one doesn't work yet for added files.
- # log all.
- if ${CVS} log >> ${LOGFILE}; then
- echo "PASS: test 18-${do}-$j" >>${LOGFILE}
- else
- echo "FAIL: test 18-${do}-$j" | tee -a ${LOGFILE}
- fi
-
- cd ..
- # update all.
- if ${CVS} update ; then
- echo "PASS: test 21-${do}-$j" >>${LOGFILE}
- else
- echo "FAIL: test 21-${do}-$j" | tee -a ${LOGFILE}; exit 1
- fi
-
- # log all.
- # FIXME: doesn't work right for added files.
- if ${CVS} log first-dir >> ${LOGFILE}; then
- echo "PASS: test 22-${do}-$j" >>${LOGFILE}
- else
- echo "FAIL: test 22-${do}-$j" | tee -a ${LOGFILE}
- fi
-
- # status all.
- if ${CVS} status first-dir >> ${LOGFILE}; then
- echo "PASS: test 23-${do}-$j" >>${LOGFILE}
- else
- echo "FAIL: test 23-${do}-$j" | tee -a ${LOGFILE}; exit 1
- fi
-
- # update all.
- if ${CVS} update first-dir ; then
- echo "PASS: test 24-${do}-$j" >>${LOGFILE}
- else
- echo "FAIL: test 24-${do}-$j" | tee -a ${LOGFILE} ; exit 1
- fi
-
- # update all.
- if ${CVS} co first-dir ; then
- echo "PASS: test 27-${do}-$j" >>${LOGFILE}
- else
- echo "FAIL: test 27-${do}-$j" | tee -a ${LOGFILE} ; exit 1
- fi
-
- cd first-dir
- done # j
- rm -f ${files}
- done # do
-
- files="file2 file3 file4 file5"
- done
- if ${CVS} tag first-dive ; then
- echo "PASS: test 28" >>${LOGFILE}
- else
- echo "FAIL: test 28" | tee -a ${LOGFILE} ; exit 1
- fi
- cd ..
- rm -rf ${CVSROOT_DIRNAME}/first-dir
- rm -rf first-dir
- ;;
-
- deep)
- # Test the ability to operate on directories nested rather deeply.
- mkdir ${CVSROOT_DIRNAME}/first-dir
- dotest deep-1 "${testcvs} -q co first-dir" ''
- cd first-dir
- for i in dir1 dir2 dir3 dir4 dir5 dir6 dir7 dir8; do
- mkdir $i
- dotest deep-2-$i "${testcvs} add $i" \
- 'Directory /tmp/cvs-sanity/cvsroot/first-dir/dir1[/dir0-9]* added to the repository'
- cd $i
- echo file1 >file1
- dotest deep-3-$i "${testcvs} add file1" \
- "${PROG}"' [a-z]*: scheduling file `file1'\'' for addition
- '"${PROG}"' [a-z]*: use '\''cvs commit'\'' to add this file permanently'
- done
- cd ../../../../../../../../..
- dotest deep-4 "${testcvs} -q ci -m add-them first-dir" \
- 'RCS file: /tmp/cvs-sanity/cvsroot/first-dir/dir1/file1,v
- done
- Checking in first-dir/dir1/file1;
- /tmp/cvs-sanity/cvsroot/first-dir/dir1/file1,v <-- file1
- initial revision: 1.1
- done
- RCS file: /tmp/cvs-sanity/cvsroot/first-dir/dir1/dir2/file1,v
- done
- Checking in first-dir/dir1/dir2/file1;
- /tmp/cvs-sanity/cvsroot/first-dir/dir1/dir2/file1,v <-- file1
- initial revision: 1.1
- done
- RCS file: /tmp/cvs-sanity/cvsroot/first-dir/dir1/dir2/dir3/file1,v
- done
- Checking in first-dir/dir1/dir2/dir3/file1;
- /tmp/cvs-sanity/cvsroot/first-dir/dir1/dir2/dir3/file1,v <-- file1
- initial revision: 1.1
- done
- RCS file: /tmp/cvs-sanity/cvsroot/first-dir/dir1/dir2/dir3/dir4/file1,v
- done
- Checking in first-dir/dir1/dir2/dir3/dir4/file1;
- /tmp/cvs-sanity/cvsroot/first-dir/dir1/dir2/dir3/dir4/file1,v <-- file1
- initial revision: 1.1
- done
- RCS file: /tmp/cvs-sanity/cvsroot/first-dir/dir1/dir2/dir3/dir4/dir5/file1,v
- done
- Checking in first-dir/dir1/dir2/dir3/dir4/dir5/file1;
- /tmp/cvs-sanity/cvsroot/first-dir/dir1/dir2/dir3/dir4/dir5/file1,v <-- file1
- initial revision: 1.1
- done
- RCS file: /tmp/cvs-sanity/cvsroot/first-dir/dir1/dir2/dir3/dir4/dir5/dir6/file1,v
- done
- Checking in first-dir/dir1/dir2/dir3/dir4/dir5/dir6/file1;
- /tmp/cvs-sanity/cvsroot/first-dir/dir1/dir2/dir3/dir4/dir5/dir6/file1,v <-- file1
- initial revision: 1.1
- done
- RCS file: /tmp/cvs-sanity/cvsroot/first-dir/dir1/dir2/dir3/dir4/dir5/dir6/dir7/file1,v
- done
- Checking in first-dir/dir1/dir2/dir3/dir4/dir5/dir6/dir7/file1;
- /tmp/cvs-sanity/cvsroot/first-dir/dir1/dir2/dir3/dir4/dir5/dir6/dir7/file1,v <-- file1
- initial revision: 1.1
- done
- RCS file: /tmp/cvs-sanity/cvsroot/first-dir/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/file1,v
- done
- Checking in first-dir/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/file1;
- /tmp/cvs-sanity/cvsroot/first-dir/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/file1,v <-- file1
- initial revision: 1.1
- done'
-
- if echo "yes" | ${testcvs} release -d first-dir >>${LOGFILE}; then
- pass deep-5
- else
- fail deep-5
- fi
- rm -rf ${CVSROOT_DIRNAME}/first-dir
- ;;
-
- basic2)
- # Test rtag, import, history, various miscellaneous operations
-
- # First empty the history file
- rm ${CVSROOT_DIRNAME}/CVSROOT/history
- touch ${CVSROOT_DIRNAME}/CVSROOT/history
-
- mkdir ${CVSROOT_DIRNAME}/first-dir
- dotest basic2-1 "${testcvs} -q co first-dir" ''
- for i in first-dir dir1 dir2 ; do
- if [ ! -d $i ] ; then
- mkdir $i
- if ${CVS} add $i >> ${LOGFILE}; then
- echo "PASS: test 29-$i" >>${LOGFILE}
- else
- echo "FAIL: test 29-$i" | tee -a ${LOGFILE} ; exit 1
- fi
- fi
-
- cd $i
-
- for j in file6 file7; do
- echo $j > $j
- done
-
- if ${CVS} add file6 file7 2>> ${LOGFILE}; then
- echo "PASS: test 30-$i-$j" >>${LOGFILE}
- else
- echo "FAIL: test 30-$i-$j" | tee -a ${LOGFILE} ; exit 1
- fi
- done
- cd ../../..
- if ${CVS} update first-dir ; then
- echo "PASS: test 31" >>${LOGFILE}
- else
- echo "FAIL: test 31" | tee -a ${LOGFILE} ; exit 1
- fi
-
- # fixme: doesn't work right for added files.
- if ${CVS} log first-dir >> ${LOGFILE}; then
- echo "PASS: test 32" >>${LOGFILE}
- else
- echo "FAIL: test 32" | tee -a ${LOGFILE} # ; exit 1
- fi
-
- if ${CVS} status first-dir >> ${LOGFILE}; then
- echo "PASS: test 33" >>${LOGFILE}
- else
- echo "FAIL: test 33" | tee -a ${LOGFILE} ; exit 1
- fi
-
- # if ${CVS} diff -u first-dir >> ${LOGFILE} || [ $? = 1 ] ; then
- # echo "PASS: test 34" >>${LOGFILE}
- # else
- # echo "FAIL: test 34" | tee -a ${LOGFILE} # ; exit 1
- # fi
-
- if ${CVS} ci -m "second dive" first-dir >> ${LOGFILE} 2>&1; then
- echo "PASS: test 35" >>${LOGFILE}
- else
- echo "FAIL: test 35" | tee -a ${LOGFILE} ; exit 1
- fi
-
- if ${CVS} tag second-dive first-dir ; then
- echo "PASS: test 36" >>${LOGFILE}
- else
- echo "FAIL: test 36" | tee -a ${LOGFILE} ; exit 1
- fi
-
- # third dive - in bunch o' directories, add bunch o' files,
- # delete some, change some.
-
- for i in first-dir dir1 dir2 ; do
- cd $i
-
- # modify a file
- echo file6 >>file6
-
- # delete a file
- rm file7
-
- if ${CVS} rm file7 2>> ${LOGFILE}; then
- echo "PASS: test 37-$i" >>${LOGFILE}
- else
- echo "FAIL: test 37-$i" | tee -a ${LOGFILE} ; exit 1
- fi
-
- # and add a new file
- echo file14 >file14
-
- if ${CVS} add file14 2>> ${LOGFILE}; then
- echo "PASS: test 38-$i" >>${LOGFILE}
- else
- echo "FAIL: test 38-$i" | tee -a ${LOGFILE} ; exit 1
- fi
- done
- cd ../../..
- if ${CVS} update first-dir ; then
- echo "PASS: test 39" >>${LOGFILE}
- else
- echo "FAIL: test 39" | tee -a ${LOGFILE} ; exit 1
- fi
-
- # fixme: doesn't work right for added files
- if ${CVS} log first-dir >> ${LOGFILE}; then
- echo "PASS: test 40" >>${LOGFILE}
- else
- echo "FAIL: test 40" | tee -a ${LOGFILE} # ; exit 1
- fi
-
- if ${CVS} status first-dir >> ${LOGFILE}; then
- echo "PASS: test 41" >>${LOGFILE}
- else
- echo "FAIL: test 41" | tee -a ${LOGFILE} ; exit 1
- fi
-
- # if ${CVS} diff -u first-dir >> ${LOGFILE} || [ $? = 1 ] ; then
- # echo "PASS: test 42" >>${LOGFILE}
- # else
- # echo "FAIL: test 42" | tee -a ${LOGFILE} # ; exit 1
- # fi
-
- if ${CVS} ci -m "third dive" first-dir >>${LOGFILE} 2>&1; then
- echo "PASS: test 43" >>${LOGFILE}
- else
- echo "FAIL: test 43" | tee -a ${LOGFILE} ; exit 1
- fi
- dotest 43.5 "${testcvs} -q update first-dir" ''
-
- if ${CVS} tag third-dive first-dir ; then
- echo "PASS: test 44" >>${LOGFILE}
- else
- echo "FAIL: test 44" | tee -a ${LOGFILE} ; exit 1
- fi
-
- if echo "yes" | ${CVS} release -d first-dir ; then
- echo "PASS: test 45" >>${LOGFILE}
- else
- echo "FAIL: test 45" | tee -a ${LOGFILE} ; exit 1
- fi
-
- # end of third dive
- if [ -d first-dir ] ; then
- echo "FAIL: test 45.5" | tee -a ${LOGFILE} ; exit 1
- else
- echo "PASS: test 45.5" >>${LOGFILE}
- fi
-
- # now try some rtags
-
- # rtag HEADS
- if ${CVS} rtag rtagged-by-head first-dir ; then
- echo "PASS: test 46" >>${LOGFILE}
- else
- echo "FAIL: test 46" | tee -a ${LOGFILE} ; exit 1
- fi
-
- # tag by tag
- if ${CVS} rtag -r rtagged-by-head rtagged-by-tag first-dir ; then
- echo "PASS: test 47" >>${LOGFILE}
- else
- echo "FAIL: test 47" | tee -a ${LOGFILE} ; exit 1
- fi
-
- # tag by revision
- if ${CVS} rtag -r1.1 rtagged-by-revision first-dir ; then
- echo "PASS: test 48" >>${LOGFILE}
- else
- echo "FAIL: test 48" | tee -a ${LOGFILE} ; exit 1
- fi
-
- # rdiff by revision
- if ${CVS} rdiff -r1.1 -rrtagged-by-head first-dir >> ${LOGFILE} || [ $? = 1 ] ; then
- echo "PASS: test 49" >>${LOGFILE}
- else
- echo "FAIL: test 49" | tee -a ${LOGFILE} ; exit 1
- fi
-
- # now export by rtagged-by-head and rtagged-by-tag and compare.
- rm -rf first-dir
- if ${CVS} export -r rtagged-by-head first-dir ; then
- echo "PASS: test 50" >>${LOGFILE}
- else
- echo "FAIL: test 50" | tee -a ${LOGFILE} ; exit 1
- fi
-
- mv first-dir 1dir
- if ${CVS} export -r rtagged-by-tag first-dir ; then
- echo "PASS: test 51" >>${LOGFILE}
- else
- echo "FAIL: test 51" | tee -a ${LOGFILE} ; exit 1
- fi
-
- directory_cmp 1dir first-dir
-
- if $ISDIFF ; then
- echo "FAIL: test 52" | tee -a ${LOGFILE} ; exit 1
- else
- echo "PASS: test 52" >>${LOGFILE}
- fi
- rm -rf 1dir first-dir
-
- # checkout by revision vs export by rtagged-by-revision and compare.
- if ${CVS} export -rrtagged-by-revision -d export-dir first-dir ; then
- echo "PASS: test 53" >>${LOGFILE}
- else
- echo "FAIL: test 53" | tee -a ${LOGFILE} ; exit 1
- fi
-
- if ${CVS} co -r1.1 first-dir ; then
- echo "PASS: test 54" >>${LOGFILE}
- else
- echo "FAIL: test 54" | tee -a ${LOGFILE} ; exit 1
- fi
-
- # directory copies are done in an oblique way in order to avoid a bug in sun's tmp filesystem.
- mkdir first-dir.cpy ; (cd first-dir ; tar cf - * | (cd ../first-dir.cpy ; tar xf -))
-
- directory_cmp first-dir export-dir
-
- if $ISDIFF ; then
- echo "FAIL: test 55" | tee -a ${LOGFILE} ; exit 1
- else
- echo "PASS: test 55" >>${LOGFILE}
- fi
-
- # interrupt, while we've got a clean 1.1 here, let's import it into another tree.
- cd export-dir
- dotest 56 "${testcvs} import -m first-import second-dir first-immigration immigration1 immigration1_0" \
- 'N second-dir/file14
- N second-dir/file6
- N second-dir/file7
- '"${PROG}"' [a-z]*: Importing /tmp/cvs-sanity/cvsroot/second-dir/dir1
- N second-dir/dir1/file14
- N second-dir/dir1/file6
- N second-dir/dir1/file7
- '"${PROG}"' [a-z]*: Importing /tmp/cvs-sanity/cvsroot/second-dir/dir1/dir2
- N second-dir/dir1/dir2/file14
- N second-dir/dir1/dir2/file6
- N second-dir/dir1/dir2/file7
-
- No conflicts created by this import'
-
- cd ..
-
- if ${CVS} export -r HEAD second-dir ; then
- echo "PASS: test 57" >>${LOGFILE}
- else
- echo "FAIL: test 57" | tee -a ${LOGFILE} ; exit 1
- fi
-
- directory_cmp first-dir second-dir
-
- if $ISDIFF ; then
- echo "FAIL: test 58" | tee -a ${LOGFILE} ; exit 1
- else
- echo "PASS: test 58" >>${LOGFILE}
- fi
-
- rm -rf second-dir
- rm -rf export-dir first-dir
- mkdir first-dir
- (cd first-dir.cpy ; tar cf - * | (cd ../first-dir ; tar xf -))
-
- # update the top, cancelling sticky tags, retag, update other copy, compare.
- cd first-dir
- if ${CVS} update -A -l *file* 2>> ${LOGFILE}; then
- echo "PASS: test 59" >>${LOGFILE}
- else
- echo "FAIL: test 59" | tee -a ${LOGFILE} ; exit 1
- fi
-
- # If we don't delete the tag first, cvs won't retag it.
- # This would appear to be a feature.
- if ${CVS} tag -l -d rtagged-by-revision ; then
- echo "PASS: test 60a" >>${LOGFILE}
- else
- echo "FAIL: test 60a" | tee -a ${LOGFILE} ; exit 1
- fi
- if ${CVS} tag -l rtagged-by-revision ; then
- echo "PASS: test 60b" >>${LOGFILE}
- else
- echo "FAIL: test 60b" | tee -a ${LOGFILE} ; exit 1
- fi
-
- cd ..
- mv first-dir 1dir
- mv first-dir.cpy first-dir
- cd first-dir
-
- dotest 61 "${testcvs} -q diff -u" ''
-
- if ${CVS} update ; then
- echo "PASS: test 62" >>${LOGFILE}
- else
- echo "FAIL: test 62" | tee -a ${LOGFILE} ; exit 1
- fi
-
- cd ..
-
- #### FIXME: is this expected to work??? Need to investigate
- #### and fix or remove the test.
- # directory_cmp 1dir first-dir
- #
- # if $ISDIFF ; then
- # echo "FAIL: test 63" | tee -a ${LOGFILE} # ; exit 1
- # else
- # echo "PASS: test 63" >>${LOGFILE}
- # fi
- rm -rf 1dir first-dir
-
- # Test the cvs history command.
-
- # The reason that there are two patterns rather than using
- # \(/tmp/cvs-sanity\|<remote>\) is that we are trying to
- # make this portable. Perhaps at some point we should
- # ditch that notion and require GNU expr (or dejagnu or....)
- # since it seems to be so painful.
-
- # why are there two lines at the end of the local output
- # which don't exist in the remote output? would seem to be
- # a CVS bug.
- dotest basic2-64 "${testcvs} his -e -a" \
- 'O [0-9/]* [0-9:]* '"${PLUS}"'0000 [a-z@][a-z@]* first-dir =first-dir= /tmp/cvs-sanity/\*
- A [0-9/]* [0-9:]* '"${PLUS}"'0000 [a-z@][a-z@]* 1.1 file6 first-dir == /tmp/cvs-sanity
- A [0-9/]* [0-9:]* '"${PLUS}"'0000 [a-z@][a-z@]* 1.1 file7 first-dir == /tmp/cvs-sanity
- A [0-9/]* [0-9:]* '"${PLUS}"'0000 [a-z@][a-z@]* 1.1 file6 first-dir/dir1 == /tmp/cvs-sanity
- A [0-9/]* [0-9:]* '"${PLUS}"'0000 [a-z@][a-z@]* 1.1 file7 first-dir/dir1 == /tmp/cvs-sanity
- A [0-9/]* [0-9:]* '"${PLUS}"'0000 [a-z@][a-z@]* 1.1 file6 first-dir/dir1/dir2 == /tmp/cvs-sanity
- A [0-9/]* [0-9:]* '"${PLUS}"'0000 [a-z@][a-z@]* 1.1 file7 first-dir/dir1/dir2 == /tmp/cvs-sanity
- A [0-9/]* [0-9:]* '"${PLUS}"'0000 [a-z@][a-z@]* 1.1 file14 first-dir == /tmp/cvs-sanity
- M [0-9/]* [0-9:]* '"${PLUS}"'0000 [a-z@][a-z@]* 1.2 file6 first-dir == /tmp/cvs-sanity
- A [0-9/]* [0-9:]* '"${PLUS}"'0000 [a-z@][a-z@]* 1.1 file14 first-dir/dir1 == /tmp/cvs-sanity
- M [0-9/]* [0-9:]* '"${PLUS}"'0000 [a-z@][a-z@]* 1.2 file6 first-dir/dir1 == /tmp/cvs-sanity
- A [0-9/]* [0-9:]* '"${PLUS}"'0000 [a-z@][a-z@]* 1.1 file14 first-dir/dir1/dir2 == /tmp/cvs-sanity
- M [0-9/]* [0-9:]* '"${PLUS}"'0000 [a-z@][a-z@]* 1.2 file6 first-dir/dir1/dir2 == /tmp/cvs-sanity
- F [0-9/]* [0-9:]* '"${PLUS}"'0000 [a-z@][a-z@]* =first-dir= /tmp/cvs-sanity/\*
- T [0-9/]* [0-9:]* '"${PLUS}"'0000 [a-z@][a-z@]* first-dir \[rtagged-by-head:A\]
- T [0-9/]* [0-9:]* '"${PLUS}"'0000 [a-z@][a-z@]* first-dir \[rtagged-by-tag:rtagged-by-head\]
- T [0-9/]* [0-9:]* '"${PLUS}"'0000 [a-z@][a-z@]* first-dir \[rtagged-by-revision:1.1\]
- O [0-9/]* [0-9:]* '"${PLUS}"'0000 [a-z@][a-z@]* \[1.1\] first-dir =first-dir= /tmp/cvs-sanity/\*
- U [0-9/]* [0-9:]* '"${PLUS}"'0000 [a-z@][a-z@]* 1.2 file6 first-dir == /tmp/cvs-sanity/first-dir
- U [0-9/]* [0-9:]* '"${PLUS}"'0000 [a-z@][a-z@]* 1.2 file7 first-dir == /tmp/cvs-sanity/first-dir' \
- 'O [0-9/]* [0-9:]* '"${PLUS}"'0000 [a-z@][a-z@]* first-dir =first-dir= <remote>/\*
- A [0-9/]* [0-9:]* '"${PLUS}"'0000 [a-z@][a-z@]* 1.1 file6 first-dir == <remote>
- A [0-9/]* [0-9:]* '"${PLUS}"'0000 [a-z@][a-z@]* 1.1 file7 first-dir == <remote>
- A [0-9/]* [0-9:]* '"${PLUS}"'0000 [a-z@][a-z@]* 1.1 file6 first-dir/dir1 == <remote>
- A [0-9/]* [0-9:]* '"${PLUS}"'0000 [a-z@][a-z@]* 1.1 file7 first-dir/dir1 == <remote>
- A [0-9/]* [0-9:]* '"${PLUS}"'0000 [a-z@][a-z@]* 1.1 file6 first-dir/dir1/dir2 == <remote>
- A [0-9/]* [0-9:]* '"${PLUS}"'0000 [a-z@][a-z@]* 1.1 file7 first-dir/dir1/dir2 == <remote>
- A [0-9/]* [0-9:]* '"${PLUS}"'0000 [a-z@][a-z@]* 1.1 file14 first-dir == <remote>
- M [0-9/]* [0-9:]* '"${PLUS}"'0000 [a-z@][a-z@]* 1.2 file6 first-dir == <remote>
- A [0-9/]* [0-9:]* '"${PLUS}"'0000 [a-z@][a-z@]* 1.1 file14 first-dir/dir1 == <remote>
- M [0-9/]* [0-9:]* '"${PLUS}"'0000 [a-z@][a-z@]* 1.2 file6 first-dir/dir1 == <remote>
- A [0-9/]* [0-9:]* '"${PLUS}"'0000 [a-z@][a-z@]* 1.1 file14 first-dir/dir1/dir2 == <remote>
- M [0-9/]* [0-9:]* '"${PLUS}"'0000 [a-z@][a-z@]* 1.2 file6 first-dir/dir1/dir2 == <remote>
- F [0-9/]* [0-9:]* '"${PLUS}"'0000 [a-z@][a-z@]* =first-dir= <remote>/\*
- T [0-9/]* [0-9:]* '"${PLUS}"'0000 [a-z@][a-z@]* first-dir \[rtagged-by-head:A\]
- T [0-9/]* [0-9:]* '"${PLUS}"'0000 [a-z@][a-z@]* first-dir \[rtagged-by-tag:rtagged-by-head\]
- T [0-9/]* [0-9:]* '"${PLUS}"'0000 [a-z@][a-z@]* first-dir \[rtagged-by-revision:1.1\]
- O [0-9/]* [0-9:]* '"${PLUS}"'0000 [a-z@][a-z@]* \[1.1\] first-dir =first-dir= <remote>/\*'
-
- rm -rf ${CVSROOT_DIRNAME}/first-dir
- rm -rf ${CVSROOT_DIRNAME}/second-dir
- ;;
-
- death) # next dive. test death support.
- mkdir ${CVSROOT_DIRNAME}/first-dir
- if ${CVS} co first-dir ; then
- echo "PASS: test 65" >>${LOGFILE}
- else
- echo "FAIL: test 65" | tee -a ${LOGFILE} ; exit 1
- fi
-
- cd first-dir
-
- # Create a directory with only dead files, to make sure CVS
- # doesn't get confused by it.
- mkdir subdir
- dotest 65a0 "${testcvs} add subdir" \
- 'Directory /tmp/cvs-sanity/cvsroot/first-dir/subdir added to the repository'
- cd subdir
- echo file in subdir >sfile
- dotest 65a1 "${testcvs} add sfile" \
- "${PROG}"' [a-z]*: scheduling file `sfile'\'' for addition
- '"${PROG}"' [a-z]*: use '\''cvs commit'\'' to add this file permanently'
- dotest 65a2 "${testcvs} -q ci -m add-it" \
- 'RCS file: /tmp/cvs-sanity/cvsroot/first-dir/subdir/sfile,v
- done
- Checking in sfile;
- /tmp/cvs-sanity/cvsroot/first-dir/subdir/sfile,v <-- sfile
- initial revision: 1.1
- done'
- rm sfile
- dotest 65a3 "${testcvs} rm sfile" \
- "${PROG}"' [a-z]*: scheduling `sfile'\'' for removal
- '"${PROG}"' [a-z]*: use '\'"${PROG}"' commit'\'' to remove this file permanently'
- dotest 65a4 "${testcvs} -q ci -m remove-it" \
- 'Removing sfile;
- /tmp/cvs-sanity/cvsroot/first-dir/subdir/sfile,v <-- sfile
- new revision: delete; previous revision: 1.1
- done'
- cd ..
- dotest 65a5 "${testcvs} -q update -P" ''
- dotest_fail 65a6 "test -d subdir" ''
-
- # add a file.
- touch file1
- if ${CVS} add file1 2>> ${LOGFILE}; then
- echo "PASS: test 66" >>${LOGFILE}
- else
- echo "FAIL: test 66" | tee -a ${LOGFILE} ; exit 1
- fi
-
- # commit
- if ${CVS} ci -m test >> ${LOGFILE} 2>&1; then
- echo "PASS: test 67" >>${LOGFILE}
- else
- echo "FAIL: test 67" | tee -a ${LOGFILE} ; exit 1
- fi
-
- # remove
- rm file1
- if ${CVS} rm file1 2>> ${LOGFILE}; then
- echo "PASS: test 68" >>${LOGFILE}
- else
- echo "FAIL: test 68" | tee -a ${LOGFILE} ; exit 1
- fi
-
- # commit
- if ${CVS} ci -m test >>${LOGFILE} ; then
- echo "PASS: test 69" >>${LOGFILE}
- else
- echo "FAIL: test 69" | tee -a ${LOGFILE} ; exit 1
- fi
-
- dotest_fail 69a0 "test -f file1" ''
- # get the old contents of file1 back
- if ${testcvs} update -p -r 1.1 file1 >file1 2>>${LOGFILE}; then
- pass 69a1
- else
- fail 69a1
- fi
- dotest 69a2 "cat file1" ''
-
- # create second file
- touch file2
- if ${CVS} add file1 file2 2>> ${LOGFILE}; then
- echo "PASS: test 70" >>${LOGFILE}
- else
- echo "FAIL: test 70" | tee -a ${LOGFILE} ; exit 1
- fi
-
- # commit
- if ${CVS} ci -m test >> ${LOGFILE} 2>&1; then
- echo "PASS: test 71" >>${LOGFILE}
- else
- echo "FAIL: test 71" | tee -a ${LOGFILE} ; exit 1
- fi
-
- # log
- if ${CVS} log file1 >> ${LOGFILE}; then
- echo "PASS: test 72" >>${LOGFILE}
- else
- echo "FAIL: test 72" | tee -a ${LOGFILE} ; exit 1
- fi
-
- # file4 will be dead at the time of branching and stay dead.
- echo file4 > file4
- dotest death-file4-add "${testcvs} add file4" \
- "${PROG}"' [a-z]*: scheduling file `file4'\'' for addition
- '"${PROG}"' [a-z]*: use '\''cvs commit'\'' to add this file permanently'
- dotest death-file4-ciadd "${testcvs} -q ci -m add file4" \
- 'RCS file: /tmp/cvs-sanity/cvsroot/first-dir/file4,v
- done
- Checking in file4;
- /tmp/cvs-sanity/cvsroot/first-dir/file4,v <-- file4
- initial revision: 1.1
- done'
- rm file4
- dotest death-file4-rm "${testcvs} remove file4" \
- "${PROG}"' [a-z]*: scheduling `file4'\'' for removal
- '"${PROG}"' [a-z]*: use '\'"${PROG}"' commit'\'' to remove this file permanently'
- dotest death-file4-cirm "${testcvs} -q ci -m remove file4" \
- 'Removing file4;
- /tmp/cvs-sanity/cvsroot/first-dir/file4,v <-- file4
- new revision: delete; previous revision: 1.1
- done'
-
- # branch1
- if ${CVS} tag -b branch1 ; then
- echo "PASS: test 73" >>${LOGFILE}
- else
- echo "FAIL: test 73" | tee -a ${LOGFILE} ; exit 1
- fi
-
- # and move to the branch.
- if ${CVS} update -r branch1 ; then
- echo "PASS: test 74" >>${LOGFILE}
- else
- echo "FAIL: test 74" | tee -a ${LOGFILE} ; exit 1
- fi
-
- dotest_fail death-file4-3 "test -f file4" ''
-
- # add a file in the branch
- echo line1 from branch1 >> file3
- if ${CVS} add file3 2>> ${LOGFILE}; then
- echo "PASS: test 75" >>${LOGFILE}
- else
- echo "FAIL: test 75" | tee -a ${LOGFILE} ; exit 1
- fi
-
- # commit
- if ${CVS} ci -m test >> ${LOGFILE} 2>&1; then
- echo "PASS: test 76" >>${LOGFILE}
- else
- echo "FAIL: test 76" | tee -a ${LOGFILE} ; exit 1
- fi
-
- # remove
- rm file3
- if ${CVS} rm file3 2>> ${LOGFILE}; then
- echo "PASS: test 77" >>${LOGFILE}
- else
- echo "FAIL: test 77" | tee -a ${LOGFILE} ; exit 1
- fi
-
- # commit
- if ${CVS} ci -m test >>${LOGFILE} ; then
- echo "PASS: test 78" >>${LOGFILE}
- else
- echo "FAIL: test 78" | tee -a ${LOGFILE} ; exit 1
- fi
-
- # add again
- echo line1 from branch1 >> file3
- if ${CVS} add file3 2>> ${LOGFILE}; then
- echo "PASS: test 79" >>${LOGFILE}
- else
- echo "FAIL: test 79" | tee -a ${LOGFILE} ; exit 1
- fi
-
- # commit
- if ${CVS} ci -m test >> ${LOGFILE} 2>&1; then
- echo "PASS: test 80" >>${LOGFILE}
- else
- echo "FAIL: test 80" | tee -a ${LOGFILE} ; exit 1
- fi
-
- # change the first file
- echo line2 from branch1 >> file1
-
- # commit
- if ${CVS} ci -m test >> ${LOGFILE} 2>&1; then
- echo "PASS: test 81" >>${LOGFILE}
- else
- echo "FAIL: test 81" | tee -a ${LOGFILE} ; exit 1
- fi
-
- # remove the second
- rm file2
- if ${CVS} rm file2 2>> ${LOGFILE}; then
- echo "PASS: test 82" >>${LOGFILE}
- else
- echo "FAIL: test 82" | tee -a ${LOGFILE} ; exit 1
- fi
-
- # commit
- if ${CVS} ci -m test >>${LOGFILE}; then
- echo "PASS: test 83" >>${LOGFILE}
- else
- echo "FAIL: test 83" | tee -a ${LOGFILE} ; exit 1
- fi
-
- # back to the trunk.
- if ${CVS} update -A 2>> ${LOGFILE}; then
- echo "PASS: test 84" >>${LOGFILE}
- else
- echo "FAIL: test 84" | tee -a ${LOGFILE} ; exit 1
- fi
-
- dotest_fail death-file4-4 "test -f file4" ''
-
- if [ -f file3 ] ; then
- echo "FAIL: test 85" | tee -a ${LOGFILE} ; exit 1
- else
- echo "PASS: test 85" >>${LOGFILE}
- fi
-
- # join
- if ${CVS} update -j branch1 >> ${LOGFILE} 2>&1; then
- echo "PASS: test 86" >>${LOGFILE}
- else
- echo "FAIL: test 86" | tee -a ${LOGFILE} ; exit 1
- fi
-
- dotest_fail death-file4-5 "test -f file4" ''
-
- if [ -f file3 ] ; then
- echo "PASS: test 87" >>${LOGFILE}
- else
- echo "FAIL: test 87" | tee -a ${LOGFILE} ; exit 1
- fi
-
- # Make sure that we joined the correct change to file1
- if echo line2 from branch1 | cmp - file1 >/dev/null; then
- echo 'PASS: test 87a' >>${LOGFILE}
- else
- echo 'FAIL: test 87a' | tee -a ${LOGFILE}
- exit 1
- fi
-
- # update
- if ${CVS} update ; then
- echo "PASS: test 88" >>${LOGFILE}
- else
- echo "FAIL: test 88" | tee -a ${LOGFILE} ; exit 1
- fi
-
- # commit
- if ${CVS} ci -m test >>${LOGFILE} 2>&1; then
- echo "PASS: test 89" >>${LOGFILE}
- else
- echo "FAIL: test 89" | tee -a ${LOGFILE} ; exit 1
- fi
-
- # remove first file.
- rm file1
- if ${CVS} rm file1 2>> ${LOGFILE}; then
- echo "PASS: test 90" >>${LOGFILE}
- else
- echo "FAIL: test 90" | tee -a ${LOGFILE} ; exit 1
- fi
-
- # commit
- if ${CVS} ci -m test >>${LOGFILE}; then
- echo "PASS: test 91" >>${LOGFILE}
- else
- echo "FAIL: test 91" | tee -a ${LOGFILE} ; exit 1
- fi
-
- if [ -f file1 ] ; then
- echo "FAIL: test 92" | tee -a ${LOGFILE} ; exit 1
- else
- echo "PASS: test 92" >>${LOGFILE}
- fi
-
- # typo; try to get to the branch and fail
- dotest_fail 92.1a "${testcvs} update -r brnach1" \
- "${PROG}"' \[[a-z]* aborted\]: no such tag brnach1'
- # Make sure we are still on the trunk
- if test -f file1 ; then
- echo "FAIL: 92.1b" | tee -a ${LOGFILE} ; exit 1
- else
- echo "PASS: 92.1b" >>${LOGFILE}
- fi
- if test -f file2 ; then
- echo "PASS: 92.1c" >>${LOGFILE}
- else
- echo "FAIL: 92.1c" | tee -a ${LOGFILE} ; exit 1
- fi
-
- # back to branch1
- if ${CVS} update -r branch1 2>> ${LOGFILE}; then
- echo "PASS: test 93" >>${LOGFILE}
- else
- echo "FAIL: test 93" | tee -a ${LOGFILE} ; exit 1
- fi
-
- dotest_fail death-file4-6 "test -f file4" ''
-
- if [ -f file1 ] ; then
- echo "PASS: test 94" >>${LOGFILE}
- else
- echo "FAIL: test 94" | tee -a ${LOGFILE} ; exit 1
- fi
-
- # and join
- if ${CVS} update -j HEAD >> ${LOGFILE} 2>&1; then
- echo "PASS: test 95" >>${LOGFILE}
- else
- echo "FAIL: test 95" | tee -a ${LOGFILE} ; exit 1
- fi
-
- dotest_fail death-file4-7 "test -f file4" ''
-
- cd .. ; rm -rf first-dir ${CVSROOT_DIRNAME}/first-dir
- ;;
- branches)
- # More branch tests, including branches off of branches
- mkdir ${CVSROOT_DIRNAME}/first-dir
- dotest branches-1 "${testcvs} -q co first-dir" ''
- cd first-dir
- echo 1:ancest >file1
- echo 2:ancest >file2
- echo 3:ancest >file3
- echo 4:trunk-1 >file4
- dotest branches-2 "${testcvs} add file1 file2 file3 file4" \
- "${PROG}"' [a-z]*: scheduling file `file1'\'' for addition
- '"${PROG}"' [a-z]*: scheduling file `file2'\'' for addition
- '"${PROG}"' [a-z]*: scheduling file `file3'\'' for addition
- '"${PROG}"' [a-z]*: scheduling file `file4'\'' for addition
- '"${PROG}"' [a-z]*: use '\''cvs commit'\'' to add these files permanently'
- dotest branches-3 "${testcvs} -q ci -m add-it" \
- 'RCS file: /tmp/cvs-sanity/cvsroot/first-dir/file1,v
- done
- Checking in file1;
- /tmp/cvs-sanity/cvsroot/first-dir/file1,v <-- file1
- initial revision: 1.1
- done
- RCS file: /tmp/cvs-sanity/cvsroot/first-dir/file2,v
- done
- Checking in file2;
- /tmp/cvs-sanity/cvsroot/first-dir/file2,v <-- file2
- initial revision: 1.1
- done
- RCS file: /tmp/cvs-sanity/cvsroot/first-dir/file3,v
- done
- Checking in file3;
- /tmp/cvs-sanity/cvsroot/first-dir/file3,v <-- file3
- initial revision: 1.1
- done
- RCS file: /tmp/cvs-sanity/cvsroot/first-dir/file4,v
- done
- Checking in file4;
- /tmp/cvs-sanity/cvsroot/first-dir/file4,v <-- file4
- initial revision: 1.1
- done'
- echo 4:trunk-2 >file4
- dotest branches-3.2 "${testcvs} -q ci -m trunk-before-branch" \
- 'Checking in file4;
- /tmp/cvs-sanity/cvsroot/first-dir/file4,v <-- file4
- new revision: 1.2; previous revision: 1.1
- done'
- dotest branches-4 "${testcvs} tag -b br1" "${PROG}"' [a-z]*: Tagging \.
- T file1
- T file2
- T file3
- T file4'
- dotest branches-5 "${testcvs} update -r br1" \
- "${PROG}"' [a-z]*: Updating \.'
- echo 1:br1 >file1
- echo 2:br1 >file2
- echo 4:br1 >file4
- dotest branches-6 "${testcvs} -q ci -m modify" \
- 'Checking in file1;
- /tmp/cvs-sanity/cvsroot/first-dir/file1,v <-- file1
- new revision: 1.1.2.1; previous revision: 1.1
- done
- Checking in file2;
- /tmp/cvs-sanity/cvsroot/first-dir/file2,v <-- file2
- new revision: 1.1.2.1; previous revision: 1.1
- done
- Checking in file4;
- /tmp/cvs-sanity/cvsroot/first-dir/file4,v <-- file4
- new revision: 1.2.2.1; previous revision: 1.2
- done'
- dotest branches-7 "${testcvs} -q tag -b brbr" 'T file1
- T file2
- T file3
- T file4'
- dotest branches-8 "${testcvs} -q update -r brbr" ''
- echo 1:brbr >file1
- echo 4:brbr >file4
- dotest branches-9 "${testcvs} -q ci -m modify" \
- 'Checking in file1;
- /tmp/cvs-sanity/cvsroot/first-dir/file1,v <-- file1
- new revision: 1.1.2.1.2.1; previous revision: 1.1.2.1
- done
- Checking in file4;
- /tmp/cvs-sanity/cvsroot/first-dir/file4,v <-- file4
- new revision: 1.2.2.1.2.1; previous revision: 1.2.2.1
- done'
- dotest branches-10 "cat file1 file2 file3 file4" '1:brbr
- 2:br1
- 3:ancest
- 4:brbr'
- dotest branches-11 "${testcvs} -q update -r br1" \
- '[UP] file1
- [UP] file4'
- dotest branches-12 "cat file1 file2 file3 file4" '1:br1
- 2:br1
- 3:ancest
- 4:br1'
- echo 4:br1-2 >file4
- dotest branches-12.2 "${testcvs} -q ci -m change-on-br1" \
- 'Checking in file4;
- /tmp/cvs-sanity/cvsroot/first-dir/file4,v <-- file4
- new revision: 1.2.2.2; previous revision: 1.2.2.1
- done'
- dotest branches-13 "${testcvs} -q update -A" '[UP] file1
- [UP] file2
- [UP] file4'
- dotest branches-14 "cat file1 file2 file3 file4" '1:ancest
- 2:ancest
- 3:ancest
- 4:trunk-2'
- echo 4:trunk-3 >file4
- dotest branches-14.2 \
- "${testcvs} -q ci -m trunk-change-after-branch" \
- 'Checking in file4;
- /tmp/cvs-sanity/cvsroot/first-dir/file4,v <-- file4
- new revision: 1.3; previous revision: 1.2
- done'
- dotest branches-14.3 "${testcvs} log file4" \
- '
- RCS file: /tmp/cvs-sanity/cvsroot/first-dir/file4,v
- Working file: file4
- head: 1\.3
- branch:
- locks: strict
- access list:
- symbolic names:
- brbr: 1\.2\.2\.1\.0\.2
- br1: 1\.2\.0\.2
- keyword substitution: kv
- total revisions: 6; selected revisions: 6
- description:
- ----------------------------
- revision 1\.3
- date: [0-9/: ]*; author: [a-z@][a-z@]*; state: Exp; lines: '"${PLUS}"'1 -1
- trunk-change-after-branch
- ----------------------------
- revision 1\.2
- date: [0-9/: ]*; author: [a-z@][a-z@]*; state: Exp; lines: '"${PLUS}"'1 -1
- branches: 1\.2\.2;
- trunk-before-branch
- ----------------------------
- revision 1\.1
- date: [0-9/: ]*; author: [a-z@][a-z@]*; state: Exp;
- add-it
- ----------------------------
- revision 1\.2\.2\.2
- date: [0-9/: ]*; author: [a-z@][a-z@]*; state: Exp; lines: '"${PLUS}"'1 -1
- change-on-br1
- ----------------------------
- revision 1\.2\.2\.1
- date: [0-9/: ]*; author: [a-z@][a-z@]*; state: Exp; lines: '"${PLUS}"'1 -1
- branches: 1\.2\.2\.1\.2;
- modify
- ----------------------------
- revision 1\.2\.2\.1\.2\.1
- date: [0-9/: ]*; author: [a-z@][a-z@]*; state: Exp; lines: '"${PLUS}"'1 -1
- modify
- ============================================================================='
- dotest_status branches-14.4 1 \
- "${testcvs} diff -c -r 1.1 -r 1.3 file4" \
- 'Index: file4
- ===================================================================
- RCS file: /tmp/cvs-sanity/cvsroot/first-dir/file4,v
- retrieving revision 1\.1
- retrieving revision 1\.3
- diff -c -r1\.1 -r1\.3
- \*\*\* file4 [0-9/]* [0-9:]* 1\.1
- --- file4 [0-9/]* [0-9:]* 1\.3
- \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
- \*\*\* 1 \*\*\*\*
- ! 4:trunk-1
- --- 1 ----
- ! 4:trunk-3'
- dotest_status branches-14.5 1 \
- "${testcvs} diff -c -r 1.1 -r 1.2.2.1 file4" \
- 'Index: file4
- ===================================================================
- RCS file: /tmp/cvs-sanity/cvsroot/first-dir/file4,v
- retrieving revision 1\.1
- retrieving revision 1\.2\.2\.1
- diff -c -r1\.1 -r1\.2\.2\.1
- \*\*\* file4 [0-9/]* [0-9:]* 1\.1
- --- file4 [0-9/]* [0-9:]* 1\.2\.2\.1
- \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
- \*\*\* 1 \*\*\*\*
- ! 4:trunk-1
- --- 1 ----
- ! 4:br1'
- dotest branches-15 \
- "${testcvs} update -j 1.1.2.1 -j 1.1.2.1.2.1 file1" \
- 'RCS file: /tmp/cvs-sanity/cvsroot/first-dir/file1,v
- retrieving revision 1.1.2.1
- retrieving revision 1.1.2.1.2.1
- Merging differences between 1.1.2.1 and 1.1.2.1.2.1 into file1
- rcsmerge: warning: conflicts during merge'
- dotest branches-16 "cat file1" '<<<<<<< file1
- 1:ancest
- =======
- 1:brbr
- >>>>>>> 1.1.2.1.2.1'
- cd ..
-
- if test "$keep" = yes; then
- echo Keeping /tmp/cvs-sanity and exiting due to --keep
- exit 0
- fi
-
- rm -rf ${CVSROOT_DIRNAME}/first-dir
- rm -r first-dir
- ;;
-
- import) # test death after import
- # import
- mkdir import-dir ; cd import-dir
-
- for i in 1 2 3 4 ; do
- echo imported file"$i" > imported-file"$i"
- done
-
- # This directory should be on the default ignore list,
- # so it shouldn't get imported.
- mkdir RCS
- echo ignore.me >RCS/ignore.me
-
- echo 'import should not expand $''Id$' >>imported-file2
- cp imported-file2 ../imported-file2-orig.tmp
-
- if ${CVS} import -m first-import first-dir vendor-branch junk-1_0 ; then
- echo "PASS: test 96" >>${LOGFILE}
- else
- echo "FAIL: test 96" | tee -a ${LOGFILE} ; exit 1
- fi
-
- if cmp ../imported-file2-orig.tmp imported-file2; then
- pass 96.5
- else
- fail 96.5
- fi
- cd ..
-
- # co
- if ${CVS} co first-dir ; then
- echo "PASS: test 97" >>${LOGFILE}
- else
- echo "FAIL: test 97" | tee -a ${LOGFILE} ; exit 1
- fi
-
- cd first-dir
- for i in 1 2 3 4 ; do
- if [ -f imported-file"$i" ] ; then
- echo "PASS: test 98-$i" >>${LOGFILE}
- else
- echo "FAIL: test 98-$i" | tee -a ${LOGFILE} ; exit 1
- fi
- done
- if test -d RCS; then
- echo "FAIL: test 98.5" | tee -a ${LOGFILE} ; exit 1
- else
- echo "PASS: test 98.5" >>${LOGFILE}
- fi
-
- # remove
- rm imported-file1
- if ${CVS} rm imported-file1 2>> ${LOGFILE}; then
- echo "PASS: test 99" >>${LOGFILE}
- else
- echo "FAIL: test 99" | tee -a ${LOGFILE} ; exit 1
- fi
-
- # change
- # this sleep is significant. Otherwise, on some machines, things happen so
- # fast that the file mod times do not differ.
- sleep 1
- echo local-change >> imported-file2
-
- # commit
- if ${CVS} ci -m local-changes >> ${LOGFILE} 2>&1; then
- echo "PASS: test 100" >>${LOGFILE}
- else
- echo "FAIL: test 100" | tee -a ${LOGFILE} ; exit 1
- fi
-
- # log
- if ${CVS} log imported-file1 | grep '1.1.1.2 (dead)' ; then
- echo "FAIL: test 101" | tee -a ${LOGFILE} ; exit 1
- else
- echo "PASS: test 101" >>${LOGFILE}
- fi
-
- # update into the vendor branch.
- if ${CVS} update -rvendor-branch ; then
- echo "PASS: test 102" >>${LOGFILE}
- else
- echo "FAIL: test 102" | tee -a ${LOGFILE} ; exit 1
- fi
-
- # remove file4 on the vendor branch
- rm imported-file4
-
- if ${CVS} rm imported-file4 2>> ${LOGFILE}; then
- echo "PASS: test 103" >>${LOGFILE}
- else
- echo "FAIL: test 103" | tee -a ${LOGFILE} ; exit 1
- fi
-
- # commit
- if ${CVS} ci -m vendor-removed imported-file4 >>${LOGFILE}; then
- echo "PASS: test 104" >>${LOGFILE}
- else
- echo "FAIL: test 104" | tee -a ${LOGFILE} ; exit 1
- fi
-
- # update to main line
- if ${CVS} update -A 2>> ${LOGFILE}; then
- echo "PASS: test 105" >>${LOGFILE}
- else
- echo "FAIL: test 105" | tee -a ${LOGFILE} ; exit 1
- fi
-
- # second import - file4 deliberately unchanged
- cd ../import-dir
- for i in 1 2 3 ; do
- echo rev 2 of file $i >> imported-file"$i"
- done
- cp imported-file2 ../imported-file2-orig.tmp
-
- if ${CVS} import -m second-import first-dir vendor-branch junk-2_0 ; then
- echo "PASS: test 106" >>${LOGFILE}
- else
- echo "FAIL: test 106" | tee -a ${LOGFILE} ; exit 1
- fi
- if cmp ../imported-file2-orig.tmp imported-file2; then
- pass 106.5
- else
- fail 106.5
- fi
- cd ..
-
- # co
- if ${CVS} co first-dir ; then
- echo "PASS: test 107" >>${LOGFILE}
- else
- echo "FAIL: test 107" | tee -a ${LOGFILE} ; exit 1
- fi
-
- cd first-dir
-
- if [ -f imported-file1 ] ; then
- echo "FAIL: test 108" | tee -a ${LOGFILE} ; exit 1
- else
- echo "PASS: test 108" >>${LOGFILE}
- fi
-
- for i in 2 3 ; do
- if [ -f imported-file"$i" ] ; then
- echo "PASS: test 109-$i" >>${LOGFILE}
- else
- echo "FAIL: test 109-$i" | tee -a ${LOGFILE} ; exit 1
- fi
- done
-
- # check vendor branch for file4
- if ${CVS} update -rvendor-branch ; then
- echo "PASS: test 110" >>${LOGFILE}
- else
- echo "FAIL: test 110" | tee -a ${LOGFILE} ; exit 1
- fi
-
- if [ -f imported-file4 ] ; then
- echo "PASS: test 111" >>${LOGFILE}
- else
- echo "FAIL: test 111" | tee -a ${LOGFILE} ; exit 1
- fi
-
- # update to main line
- if ${CVS} update -A 2>> ${LOGFILE}; then
- echo "PASS: test 112" >>${LOGFILE}
- else
- echo "FAIL: test 112" | tee -a ${LOGFILE} ; exit 1
- fi
-
- cd ..
-
- if ${CVS} co -jjunk-1_0 -jjunk-2_0 first-dir >>${LOGFILE} 2>&1; then
- echo "PASS: test 113" >>${LOGFILE}
- else
- echo "FAIL: test 113" | tee -a ${LOGFILE} ; exit 1
- fi
-
- cd first-dir
-
- if [ -f imported-file1 ] ; then
- echo "FAIL: test 114" | tee -a ${LOGFILE} ; exit 1
- else
- echo "PASS: test 114" >>${LOGFILE}
- fi
-
- for i in 2 3 ; do
- if [ -f imported-file"$i" ] ; then
- echo "PASS: test 115-$i" >>${LOGFILE}
- else
- echo "FAIL: test 115-$i" | tee -a ${LOGFILE} ; exit 1
- fi
- done
-
- if cat imported-file2 | grep '====' >> ${LOGFILE}; then
- echo "PASS: test 116" >>${LOGFILE}
- else
- echo "FAIL: test 116" | tee -a ${LOGFILE} ; exit 1
- fi
- cd .. ; rm -rf first-dir ${CVSROOT_DIRNAME}/first-dir
- rm -rf import-dir
- ;;
-
- new) # look for stray "no longer pertinent" messages.
- mkdir ${CVSROOT_DIRNAME}/first-dir
-
- if ${CVS} co first-dir ; then
- echo "PASS: test 117" >>${LOGFILE}
- else
- echo "FAIL: test 117" | tee -a ${LOGFILE} ; exit 1
- fi
-
- cd first-dir
- touch a
-
- if ${CVS} add a 2>>${LOGFILE}; then
- echo "PASS: test 118" >>${LOGFILE}
- else
- echo "FAIL: test 118" | tee -a ${LOGFILE} ; exit 1
- fi
-
- if ${CVS} ci -m added >>${LOGFILE} 2>&1; then
- echo "PASS: test 119" >>${LOGFILE}
- else
- echo "FAIL: test 119" | tee -a ${LOGFILE} ; exit 1
- fi
-
- rm a
-
- if ${CVS} rm a 2>>${LOGFILE}; then
- echo "PASS: test 120" >>${LOGFILE}
- else
- echo "FAIL: test 120" | tee -a ${LOGFILE} ; exit 1
- fi
-
- if ${CVS} ci -m removed >>${LOGFILE} ; then
- echo "PASS: test 121" >>${LOGFILE}
- else
- echo "FAIL: test 121" | tee -a ${LOGFILE} ; exit 1
- fi
-
- if ${CVS} update -A 2>&1 | grep longer ; then
- echo "FAIL: test 122" | tee -a ${LOGFILE} ; exit 1
- else
- echo "PASS: test 122" >>${LOGFILE}
- fi
-
- if ${CVS} update -rHEAD 2>&1 | grep longer ; then
- echo "FAIL: test 123" | tee -a ${LOGFILE} ; exit 1
- else
- echo "PASS: test 123" >>${LOGFILE}
- fi
-
- cd .. ; rm -rf first-dir ; rm -rf ${CVSROOT_DIRNAME}/first-dir
- ;;
-
- conflicts)
- rm -rf first-dir ${CVSROOT_DIRNAME}/first-dir
- mkdir ${CVSROOT_DIRNAME}/first-dir
-
- mkdir 1
- cd 1
-
- if ${CVS} co first-dir ; then
- echo 'PASS: test 124' >>${LOGFILE}
- else
- echo 'FAIL: test 124' | tee -a ${LOGFILE}
- fi
-
- cd first-dir
- touch a
-
- if ${CVS} add a 2>>${LOGFILE} ; then
- echo 'PASS: test 125' >>${LOGFILE}
- else
- echo 'FAIL: test 125' | tee -a ${LOGFILE}
- fi
-
- if ${CVS} ci -m added >>${LOGFILE} 2>&1; then
- echo 'PASS: test 126' >>${LOGFILE}
- else
- echo 'FAIL: test 126' | tee -a ${LOGFILE}
- fi
-
- cd ../..
- mkdir 2
- cd 2
-
- if ${CVS} co first-dir ; then
- echo 'PASS: test 127' >>${LOGFILE}
- else
- echo 'FAIL: test 127' | tee -a ${LOGFILE}
- fi
- cd first-dir
- if test -f a; then
- echo 'PASS: test 127a' >>${LOGFILE}
- else
- echo 'FAIL: test 127a' | tee -a ${LOGFILE}
- fi
-
- cd ../../1/first-dir
- echo add a line >>a
- mkdir dir1
- dotest conflicts-127b "${testcvs} add dir1" \
- 'Directory /tmp/cvs-sanity/cvsroot/first-dir/dir1 added to the repository'
- dotest conflicts-128 "${testcvs} -q ci -m changed" \
- 'Checking in a;
- /tmp/cvs-sanity/cvsroot/first-dir/a,v <-- a
- new revision: 1.2; previous revision: 1.1
- done'
- cd ../../2/first-dir
- echo add a conflicting line >>a
- dotest_fail conflicts-129 "${testcvs} -q ci -m changed" \
- "${PROG}"' [a-z]*: Up-to-date check failed for `a'\''
- '"${PROG}"' \[[a-z]* aborted\]: correct above errors first!'
- mkdir dir1
- mkdir sdir
- dotest conflicts-130 "${testcvs} -q update" \
- 'RCS file: /tmp/cvs-sanity/cvsroot/first-dir/a,v
- retrieving revision 1.1
- retrieving revision 1.2
- Merging differences between 1.1 and 1.2 into a
- rcsmerge: warning: conflicts during merge
- '"${PROG}"' [a-z]*: conflicts found in a
- C a
- '"${QUESTION}"' dir1
- '"${QUESTION}"' sdir' \
- ''"${QUESTION}"' dir1
- '"${QUESTION}"' sdir
- RCS file: /tmp/cvs-sanity/cvsroot/first-dir/a,v
- retrieving revision 1.1
- retrieving revision 1.2
- Merging differences between 1.1 and 1.2 into a
- rcsmerge: warning: conflicts during merge
- '"${PROG}"' [a-z]*: conflicts found in a
- C a'
-
- # Try to check in the file with the conflict markers in it.
- if ${CVS} ci -m try 2>>${LOGFILE}; then
- echo 'FAIL: test 131' | tee -a ${LOGFILE}
- else
- # Should tell us to resolve conflict first
- echo 'PASS: test 131' >>${LOGFILE}
- fi
-
- echo lame attempt at resolving it >>a
- # Try to check in the file with the conflict markers in it.
- if ${CVS} ci -m try >>${LOGFILE} 2>&1; then
- echo 'FAIL: test 132' | tee -a ${LOGFILE}
- else
- # Should tell us to resolve conflict first
- echo 'PASS: test 132' >>${LOGFILE}
- fi
-
- echo resolve conflict >a
- if ${CVS} ci -m resolved >>${LOGFILE} 2>&1; then
- echo 'PASS: test 133' >>${LOGFILE}
- else
- echo 'FAIL: test 133' | tee -a ${LOGFILE}
- fi
-
- # Now test that we can add a file in one working directory
- # and have an update in another get it.
- cd ../../1/first-dir
- echo abc >abc
- if ${testcvs} add abc >>${LOGFILE} 2>&1; then
- echo 'PASS: test 134' >>${LOGFILE}
- else
- echo 'FAIL: test 134' | tee -a ${LOGFILE}
- fi
- if ${testcvs} ci -m 'add abc' abc >>${LOGFILE} 2>&1; then
- echo 'PASS: test 135' >>${LOGFILE}
- else
- echo 'FAIL: test 135' | tee -a ${LOGFILE}
- fi
- cd ../../2
- dotest conflicts-136 "${testcvs} -q update" \
- '[UP] first-dir/abc
- '"${QUESTION}"' first-dir/dir1
- '"${QUESTION}"' first-dir/sdir' \
- ''"${QUESTION}"' first-dir/dir1
- '"${QUESTION}"' first-dir/sdir
- [UP] first-dir/abc'
- dotest conflicts-137 'test -f first-dir/abc' ''
- rmdir first-dir/dir1 first-dir/sdir
-
- # Now test something similar, but in which the parent directory
- # (not the directory in question) has the Entries.Static flag
- # set.
- cd ../1/first-dir
- mkdir subdir
- if ${testcvs} add subdir >>${LOGFILE}; then
- echo 'PASS: test 138' >>${LOGFILE}
- else
- echo 'FAIL: test 138' | tee -a ${LOGFILE}
- fi
- cd ../..
- mkdir 3
- cd 3
- if ${testcvs} -q co first-dir/abc first-dir/subdir \
- >>${LOGFILE}; then
- echo 'PASS: test 139' >>${LOGFILE}
- else
- echo 'FAIL: test 139' | tee -a ${LOGFILE}
- fi
- cd ../1/first-dir/subdir
- echo sss >sss
- if ${testcvs} add sss >>${LOGFILE} 2>&1; then
- echo 'PASS: test 140' >>${LOGFILE}
- else
- echo 'FAIL: test 140' | tee -a ${LOGFILE}
- fi
- if ${testcvs} ci -m adding sss >>${LOGFILE} 2>&1; then
- echo 'PASS: test 140' >>${LOGFILE}
- else
- echo 'FAIL: test 140' | tee -a ${LOGFILE}
- fi
- cd ../../../3/first-dir
- if ${testcvs} -q update >>${LOGFILE}; then
- echo 'PASS: test 141' >>${LOGFILE}
- else
- echo 'FAIL: test 141' | tee -a ${LOGFILE}
- fi
- if test -f subdir/sss; then
- echo 'PASS: test 142' >>${LOGFILE}
- else
- echo 'FAIL: test 142' | tee -a ${LOGFILE}
- fi
-
- cd ../..
- rm -rf 1 2 3 ; rm -rf ${CVSROOT_DIRNAME}/first-dir
- ;;
- modules)
- rm -rf first-dir ${CVSROOT_DIRNAME}/first-dir
- mkdir ${CVSROOT_DIRNAME}/first-dir
-
- mkdir 1
- cd 1
-
- if ${testcvs} -q co first-dir; then
- echo 'PASS: test 143' >>${LOGFILE}
- else
- echo 'FAIL: test 143' | tee -a ${LOGFILE}
- exit 1
- fi
-
- cd first-dir
- mkdir subdir
- ${testcvs} add subdir >>${LOGFILE}
- cd subdir
-
- mkdir ssdir
- ${testcvs} add ssdir >>${LOGFILE}
-
- touch a b
-
- if ${testcvs} add a b 2>>${LOGFILE} ; then
- echo 'PASS: test 144' >>${LOGFILE}
- else
- echo 'FAIL: test 144' | tee -a ${LOGFILE}
- exit 1
- fi
-
- if ${testcvs} ci -m added >>${LOGFILE} 2>&1; then
- echo 'PASS: test 145' >>${LOGFILE}
- else
- echo 'FAIL: test 145' | tee -a ${LOGFILE}
- exit 1
- fi
-
- cd ..
- if ${testcvs} -q co CVSROOT >>${LOGFILE}; then
- echo 'PASS: test 146' >>${LOGFILE}
- else
- echo 'FAIL: test 146' | tee -a ${LOGFILE}
- exit 1
- fi
-
- # Here we test that CVS can deal with CVSROOT (whose repository
- # is at top level) in the same directory as subdir (whose repository
- # is a subdirectory of first-dir). TODO: Might want to check that
- # files can actually get updated in this state.
- if ${testcvs} -q update; then
- echo 'PASS: test 147' >>${LOGFILE}
- else
- echo 'FAIL: test 147' | tee -a ${LOGFILE}
- exit 1
- fi
-
- echo realmodule first-dir/subdir a >>CVSROOT/modules
- echo dirmodule first-dir/subdir >>CVSROOT/modules
- echo namedmodule -d nameddir first-dir/subdir >>CVSROOT/modules
- echo aliasmodule -a first-dir/subdir/a >>CVSROOT/modules
- echo aliasnested -a first-dir/subdir/ssdir >>CVSROOT/modules
-
- # Options must come before arguments. It is possible this should
- # be relaxed at some point (though the result would be bizarre for
- # -a); for now test the current behavior.
- echo bogusalias first-dir/subdir/a -a >>CVSROOT/modules
- if ${testcvs} ci -m 'add modules' CVSROOT/modules \
- >>${LOGFILE} 2>&1; then
- echo 'PASS: test 148' >>${LOGFILE}
- else
- echo 'FAIL: test 148' | tee -a ${LOGFILE}
- exit 1
- fi
- cd ..
- dotest 148a0 "${testcvs} co -c" 'CVSROOT CVSROOT
- aliasmodule -a first-dir/subdir/a
- aliasnested -a first-dir/subdir/ssdir
- bogusalias first-dir/subdir/a -a
- dirmodule first-dir/subdir
- namedmodule -d nameddir first-dir/subdir
- realmodule first-dir/subdir a'
- # I don't know why aliasmodule isn't printed (I would have thought
- # that it gets printed without the -a; although I'm not sure that
- # printing expansions without options is useful).
- dotest 148a1 "${testcvs} co -s" 'CVSROOT NONE CVSROOT
- bogusalias NONE first-dir/subdir/a -a
- dirmodule NONE first-dir/subdir
- namedmodule NONE first-dir/subdir
- realmodule NONE first-dir/subdir a'
-
- # Test that real modules check out to realmodule/a, not subdir/a.
- if ${testcvs} co realmodule >>${LOGFILE}; then
- echo 'PASS: test 149a1' >>${LOGFILE}
- else
- echo 'FAIL: test 149a1' | tee -a ${LOGFILE}
- exit 1
- fi
- if test -d realmodule && test -f realmodule/a; then
- echo 'PASS: test 149a2' >>${LOGFILE}
- else
- echo 'FAIL: test 149a2' | tee -a ${LOGFILE}
- exit 1
- fi
- if test -f realmodule/b; then
- echo 'FAIL: test 149a3' | tee -a ${LOGFILE}
- exit 1
- else
- echo 'PASS: test 149a3' >>${LOGFILE}
- fi
- if ${testcvs} -q co realmodule; then
- echo 'PASS: test 149a4' >>${LOGFILE}
- else
- echo 'FAIL: test 149a4' | tee -a ${LOGFILE}
- exit 1
- fi
- if echo "yes" | ${testcvs} release -d realmodule >>${LOGFILE} ; then
- echo 'PASS: test 149a5' >>${LOGFILE}
- else
- echo 'FAIL: test 149a5' | tee -a ${LOGFILE}
- exit 1
- fi
-
- # Now test the ability to check out a single file from a directory
- if ${testcvs} co dirmodule/a >>${LOGFILE}; then
- echo 'PASS: test 150c' >>${LOGFILE}
- else
- echo 'FAIL: test 150c' | tee -a ${LOGFILE}
- exit 1
- fi
- if test -d dirmodule && test -f dirmodule/a; then
- echo 'PASS: test 150d' >>${LOGFILE}
- else
- echo 'FAIL: test 150d' | tee -a ${LOGFILE}
- exit 1
- fi
- if test -f dirmodule/b; then
- echo 'FAIL: test 150e' | tee -a ${LOGFILE}
- exit 1
- else
- echo 'PASS: test 150e' >>${LOGFILE}
- fi
- if echo "yes" | ${testcvs} release -d dirmodule >>${LOGFILE} ; then
- echo 'PASS: test 150f' >>${LOGFILE}
- else
- echo 'FAIL: test 150f' | tee -a ${LOGFILE}
- exit 1
- fi
- # Now test the ability to correctly reject a non-existent filename.
- # For maximum studliness we would check that an error message is
- # being output.
- if ${testcvs} co dirmodule/nonexist >>${LOGFILE} 2>&1; then
- # We accept a zero exit status because it is what CVS does
- # (Dec 95). Probably the exit status should be nonzero,
- # however.
- echo 'PASS: test 150g1' >>${LOGFILE}
- else
- echo 'PASS: test 150g1' >>${LOGFILE}
- fi
- # We tolerate the creation of the dirmodule directory, since that
- # is what CVS does, not because we view that as preferable to not
- # creating it.
- if test -f dirmodule/a || test -f dirmodule/b; then
- echo 'FAIL: test 150g2' | tee -a ${LOGFILE}
- exit 1
- else
- echo 'PASS: test 150g2' >>${LOGFILE}
- fi
- rm -rf dirmodule
-
- # Now test that a module using -d checks out to the specified
- # directory.
- dotest 150h1 "${testcvs} -q co namedmodule" 'U nameddir/a
- U nameddir/b'
- if test -f nameddir/a && test -f nameddir/b; then
- pass 150h2
- else
- fail 150h2
- fi
- echo add line >>nameddir/a
- dotest 150h3 "${testcvs} -q co namedmodule" 'M nameddir/a'
- rm nameddir/a
- dotest 150h4 "${testcvs} -q co namedmodule" 'U nameddir/a'
- if echo "yes" | ${testcvs} release -d nameddir >>${LOGFILE} ; then
- pass 150h99
- else
- fail 150h99
- fi
-
- # Now test that alias modules check out to subdir/a, not
- # aliasmodule/a.
- if ${testcvs} co aliasmodule >>${LOGFILE}; then
- echo 'PASS: test 151' >>${LOGFILE}
- else
- echo 'FAIL: test 151' | tee -a ${LOGFILE}
- exit 1
- fi
- if test -d aliasmodule; then
- echo 'FAIL: test 152' | tee -a ${LOGFILE}
- exit 1
- else
- echo 'PASS: test 152' >>${LOGFILE}
- fi
- echo abc >>first-dir/subdir/a
- if (${testcvs} -q co aliasmodule | tee test153.tmp) \
- >>${LOGFILE}; then
- echo 'PASS: test 153' >>${LOGFILE}
- else
- echo 'FAIL: test 153' | tee -a ${LOGFILE}
- exit 1
- fi
- echo 'M first-dir/subdir/a' >ans153.tmp
- if cmp test153.tmp ans153.tmp; then
- echo 'PASS: test 154' >>${LOGFILE}
- else
- echo 'FAIL: test 154' | tee -a ${LOGFILE}
- exit 1
- fi
-
- cd ..
- rm -rf 1
-
- mkdir 2
- cd 2
- dotest modules-155a0 "${testcvs} co aliasnested" \
- "${PROG} [a-z]*: Updating first-dir/subdir/ssdir"
- dotest modules-155a1 "test -d first-dir" ''
- dotest modules-155a2 "test -d first-dir/subdir" ''
- dotest modules-155a3 "test -d first-dir/subdir/ssdir" ''
- # Test that nothing extraneous got created.
- dotest modules-155a4 "ls -1" "first-dir"
- cd ..
- rm -rf 2
-
- rm -rf ${CVSROOT_DIRNAME}/first-dir
- ;;
- mflag)
- for message in '' ' ' '
- ' ' test' ; do
- # Set up
- mkdir a-dir; cd a-dir
- # Test handling of -m during import
- echo testa >>test
- if ${testcvs} import -m "$message" a-dir A A1 >>${LOGFILE} 2>&1;then
- echo 'PASS: test 156' >>${LOGFILE}
- else
- echo 'FAIL: test 156' | tee -a ${LOGFILE}
- exit 1
- fi
- # Must import twice since the first time uses inline code that
- # avoids RCS call.
- echo testb >>test
- if ${testcvs} import -m "$message" a-dir A A2 >>${LOGFILE} 2>&1;then
- echo 'PASS: test 157' >>${LOGFILE}
- else
- echo 'FAIL: test 157' | tee -a ${LOGFILE}
- exit 1
- fi
- # Test handling of -m during ci
- cd ..; rm -rf a-dir;
- if ${testcvs} co a-dir >>${LOGFILE} 2>&1; then
- echo 'PASS: test 158' >>${LOGFILE}
- else
- echo 'FAIL: test 158' | tee -a ${LOGFILE}
- exit 1
- fi
- cd a-dir
- echo testc >>test
- if ${testcvs} ci -m "$message" >>${LOGFILE} 2>&1; then
- echo 'PASS: test 159' >>${LOGFILE}
- else
- echo 'FAIL: test 159' | tee -a ${LOGFILE}
- exit 1
- fi
- # Test handling of -m during rm/ci
- rm test;
- if ${testcvs} rm test >>${LOGFILE} 2>&1; then
- echo 'PASS: test 160' >>${LOGFILE}
- else
- echo 'FAIL: test 160' | tee -a ${LOGFILE}
- exit 1
- fi
- if ${testcvs} ci -m "$message" >>${LOGFILE} 2>&1; then
- echo 'PASS: test 161' >>${LOGFILE}
- else
- echo 'FAIL: test 161' | tee -a ${LOGFILE}
- exit 1
- fi
- # Clean up
- cd ..; rm -rf a-dir ${CVSROOT_DIRNAME}/a-dir
- done
- ;;
- errmsg1)
- mkdir ${CVSROOT_DIRNAME}/1dir
- mkdir 1
- cd 1
- if ${testcvs} -q co 1dir; then
- echo 'PASS: test 162' >>${LOGFILE}
- else
- echo 'FAIL: test 162' | tee -a ${LOGFILE}
- exit 1
- fi
- cd 1dir
- touch foo
- if ${testcvs} add foo 2>>${LOGFILE}; then
- echo 'PASS: test 163' >>${LOGFILE}
- else
- echo 'FAIL: test 163' | tee -a ${LOGFILE}
- exit 1
- fi
- if ${testcvs} ci -m added >>${LOGFILE} 2>&1; then
- echo 'PASS: test 164' >>${LOGFILE}
- else
- echo 'FAIL: test 164' | tee -a ${LOGFILE}
- exit 1
- fi
- cd ../..
- mkdir 2
- cd 2
- if ${testcvs} -q co 1dir >>${LOGFILE}; then
- echo 'PASS: test 165' >>${LOGFILE}
- else
- echo 'FAIL: test 165' | tee -a ${LOGFILE}
- exit 1
- fi
- chmod a-w 1dir
- cd ../1/1dir
- rm foo;
- if ${testcvs} rm foo >>${LOGFILE} 2>&1; then
- echo 'PASS: test 166' >>${LOGFILE}
- else
- echo 'FAIL: test 166' | tee -a ${LOGFILE}
- exit 1
- fi
- if ${testcvs} ci -m removed >>${LOGFILE} 2>&1; then
- echo 'PASS: test 167' >>${LOGFILE}
- else
- echo 'FAIL: test 167' | tee -a ${LOGFILE}
- exit 1
- fi
-
- cd ../../2/1dir
- # FIXME: should be using dotest and PROG.
- ${testcvs} -q update 2>../tst167.err
- CVSBASE=`basename $testcvs` # Get basename of CVS executable.
- cat <<EOF >../tst167.ans
- $CVSBASE server: warning: foo is not (any longer) pertinent
- $CVSBASE update: unable to remove ./foo: Permission denied
- EOF
- if cmp ../tst167.ans ../tst167.err >/dev/null ||
- ( echo "$CVSBASE [update aborted]: cannot rename file foo to CVS/,,foo: Permission denied" | cmp - ../tst167.err >/dev/null )
- then
- echo 'PASS: test 168' >>${LOGFILE}
- else
- echo 'FAIL: test 168' | tee -a ${LOGFILE}
- exit 1
- fi
-
- cd ..
- chmod u+w 1dir
- cd ..
- rm -rf 1 2 ${CVSROOT_DIRNAME}/1dir
- ;;
-
- devcom)
- mkdir ${CVSROOT_DIRNAME}/first-dir
- mkdir 1
- cd 1
- if ${testcvs} -q co first-dir >>${LOGFILE} ; then
- echo 'PASS: test 169' >>${LOGFILE}
- else
- echo 'FAIL: test 169' | tee -a ${LOGFILE}
- exit 1
- fi
-
- cd first-dir
- echo abb >abb
- if ${testcvs} add abb 2>>${LOGFILE}; then
- echo 'PASS: test 170' >>${LOGFILE}
- else
- echo 'FAIL: test 170' | tee -a ${LOGFILE}
- exit 1
- fi
- if ${testcvs} ci -m added >>${LOGFILE} 2>&1; then
- echo 'PASS: test 171' >>${LOGFILE}
- else
- echo 'FAIL: test 171' | tee -a ${LOGFILE}
- exit 1
- fi
- dotest_fail 171a0 "${testcvs} watch" "Usage${DOTSTAR}"
- if ${testcvs} watch on; then
- echo 'PASS: test 172' >>${LOGFILE}
- else
- echo 'FAIL: test 172' | tee -a ${LOGFILE}
- fi
- echo abc >abc
- if ${testcvs} add abc 2>>${LOGFILE}; then
- echo 'PASS: test 173' >>${LOGFILE}
- else
- echo 'FAIL: test 173' | tee -a ${LOGFILE}
- fi
- if ${testcvs} ci -m added >>${LOGFILE} 2>&1; then
- echo 'PASS: test 174' >>${LOGFILE}
- else
- echo 'FAIL: test 174' | tee -a ${LOGFILE}
- fi
-
- cd ../..
- mkdir 2
- cd 2
-
- if ${testcvs} -q co first-dir >>${LOGFILE}; then
- echo 'PASS: test 175' >>${LOGFILE}
- else
- echo 'FAIL: test 175' | tee -a ${LOGFILE}
- fi
- cd first-dir
- if test -w abb; then
- echo 'FAIL: test 176' | tee -a ${LOGFILE}
- else
- echo 'PASS: test 176' >>${LOGFILE}
- fi
- if test -w abc; then
- echo 'FAIL: test 177' | tee -a ${LOGFILE}
- else
- echo 'PASS: test 177' >>${LOGFILE}
- fi
-
- if ${testcvs} editors >../ans178.tmp; then
- echo 'PASS: test 178' >>${LOGFILE}
- else
- echo 'FAIL: test 178' | tee -a ${LOGFILE}
- fi
- cat ../ans178.tmp >>${LOGFILE}
- if test -s ../ans178.tmp; then
- echo 'FAIL: test 178a' | tee -a ${LOGFILE}
- else
- echo 'PASS: test 178a' >>${LOGFILE}
- fi
-
- if ${testcvs} edit abb; then
- echo 'PASS: test 179' >>${LOGFILE}
- else
- echo 'FAIL: test 179' | tee -a ${LOGFILE}
- exit 1
- fi
-
- if ${testcvs} editors >../ans180.tmp; then
- echo 'PASS: test 180' >>${LOGFILE}
- else
- echo 'FAIL: test 180' | tee -a ${LOGFILE}
- exit 1
- fi
- cat ../ans180.tmp >>${LOGFILE}
- if test -s ../ans180.tmp; then
- echo 'PASS: test 181' >>${LOGFILE}
- else
- echo 'FAIL: test 181' | tee -a ${LOGFILE}
- fi
-
- echo aaaa >>abb
- if ${testcvs} ci -m modify abb >>${LOGFILE} 2>&1; then
- echo 'PASS: test 182' >>${LOGFILE}
- else
- echo 'FAIL: test 182' | tee -a ${LOGFILE}
- fi
- # Unedit of a file not being edited should be a noop.
- dotest 182.5 "${testcvs} unedit abb" ''
-
- if ${testcvs} editors >../ans183.tmp; then
- echo 'PASS: test 183' >>${LOGFILE}
- else
- echo 'FAIL: test 183' | tee -a ${LOGFILE}
- fi
- cat ../ans183.tmp >>${LOGFILE}
- if test -s ../ans183.tmp; then
- echo 'FAIL: test 184' | tee -a ${LOGFILE}
- else
- echo 'PASS: test 184' >>${LOGFILE}
- fi
-
- if test -w abb; then
- echo 'FAIL: test 185' | tee -a ${LOGFILE}
- else
- echo 'PASS: test 185' >>${LOGFILE}
- fi
-
- if ${testcvs} edit abc; then
- echo 'PASS: test 186a1' >>${LOGFILE}
- else
- echo 'FAIL: test 186a1' | tee -a ${LOGFILE}
- fi
- # Unedit of an unmodified file.
- if ${testcvs} unedit abc; then
- echo 'PASS: test 186a2' >>${LOGFILE}
- else
- echo 'FAIL: test 186a2' | tee -a ${LOGFILE}
- fi
- if ${testcvs} edit abc; then
- echo 'PASS: test 186a3' >>${LOGFILE}
- else
- echo 'FAIL: test 186a3' | tee -a ${LOGFILE}
- fi
- echo changedabc >abc
- # Try to unedit a modified file; cvs should ask for confirmation
- if (echo no | ${testcvs} unedit abc) >>${LOGFILE}; then
- echo 'PASS: test 186a4' >>${LOGFILE}
- else
- echo 'FAIL: test 186a4' | tee -a ${LOGFILE}
- fi
- if echo changedabc | cmp - abc; then
- echo 'PASS: test 186a5' >>${LOGFILE}
- else
- echo 'FAIL: test 186a5' | tee -a ${LOGFILE}
- fi
- # OK, now confirm the unedit
- if (echo yes | ${testcvs} unedit abc) >>${LOGFILE}; then
- echo 'PASS: test 186a6' >>${LOGFILE}
- else
- echo 'FAIL: test 186a6' | tee -a ${LOGFILE}
- fi
- if echo abc | cmp - abc; then
- echo 'PASS: test 186a7' >>${LOGFILE}
- else
- echo 'FAIL: test 186a7' | tee -a ${LOGFILE}
- fi
-
- dotest devcom-a0 "${testcvs} watchers" ''
- dotest devcom-a1 "${testcvs} watch add" ''
- dotest devcom-a2 "${testcvs} watchers" \
- 'abb [a-z0-9]* edit unedit commit
- abc [a-z0-9]* edit unedit commit'
- dotest devcom-a3 "${testcvs} watch remove -a unedit abb" ''
- dotest devcom-a4 "${testcvs} watchers abb" \
- 'abb [a-z0-9]* edit commit'
-
- cd ../..
- rm -rf 1 2 ${CVSROOT_DIRNAME}/first-dir
- ;;
-
- ignore)
- dotest 187a1 "${testcvs} -q co CVSROOT" 'U CVSROOT/modules'
- cd CVSROOT
- echo rootig.c >cvsignore
- dotest 187a2 "${testcvs} add cvsignore" "${PROG}"' [a-z]*: scheduling file `cvsignore'"'"' for addition
- '"${PROG}"' [a-z]*: use '"'"'cvs commit'"'"' to add this file permanently'
-
- # As of Jan 96, local CVS prints "Examining ." and remote doesn't.
- # Accept either.
- dotest 187a3 " ${testcvs} ci -m added" \
- "${DOTSTAR}"'CS file: /tmp/cvs-sanity/cvsroot/CVSROOT/cvsignore,v
- done
- Checking in cvsignore;
- /tmp/cvs-sanity/cvsroot/CVSROOT/cvsignore,v <-- cvsignore
- initial revision: 1.1
- done
- '"${PROG}"' [a-z]*: Rebuilding administrative file database'
-
- cd ..
- if echo "yes" | ${testcvs} release -d CVSROOT >>${LOGFILE} ; then
- echo 'PASS: test 187a4' >>${LOGFILE}
- else
- echo 'FAIL: test 187a4' | tee -a ${LOGFILE}
- exit 1
- fi
-
- # CVS looks at the home dir from getpwuid, not HOME (is that correct
- # behavior?), so this is hard to test and we won't try.
- # echo foobar.c >${HOME}/.cvsignore
- CVSIGNORE=envig.c; export CVSIGNORE
- mkdir dir-to-import
- cd dir-to-import
- touch foobar.c bar.c rootig.c defig.o envig.c optig.c
- # We really should allow the files to be listed in any order.
- # But we (kludgily) just list the orders which have been observed.
- dotest 188a "${testcvs} import -m m -I optig.c first-dir tag1 tag2" \
- 'N first-dir/foobar.c
- N first-dir/bar.c
- I first-dir/rootig.c
- I first-dir/defig.o
- I first-dir/envig.c
- I first-dir/optig.c
-
- No conflicts created by this import' 'I first-dir/defig.o
- I first-dir/envig.c
- I first-dir/optig.c
- N first-dir/foobar.c
- N first-dir/bar.c
- I first-dir/rootig.c
-
- No conflicts created by this import'
- dotest 188b "${testcvs} import -m m -I ! second-dir tag3 tag4" \
- 'N second-dir/foobar.c
- N second-dir/bar.c
- N second-dir/rootig.c
- N second-dir/defig.o
- N second-dir/envig.c
- N second-dir/optig.c
-
- No conflicts created by this import'
- cd ..
- rm -rf dir-to-import
-
- dotest 189a "${testcvs} -q co second-dir" \
- 'U second-dir/bar.c
- U second-dir/defig.o
- U second-dir/envig.c
- U second-dir/foobar.c
- U second-dir/optig.c
- U second-dir/rootig.c'
- rm -rf second-dir
- dotest 189b "${testcvs} -q co first-dir" 'U first-dir/bar.c
- U first-dir/foobar.c'
- cd first-dir
- touch rootig.c defig.o envig.c optig.c notig.c
- dotest 189c "${testcvs} -q update -I optig.c" "${QUESTION} notig.c"
- # The fact that CVS requires us to specify -I CVS here strikes me
- # as a bug.
- dotest 189d "${testcvs} -q update -I ! -I CVS" "${QUESTION} rootig.c
- ${QUESTION} defig.o
- ${QUESTION} envig.c
- ${QUESTION} optig.c
- ${QUESTION} notig.c"
- cd ..
- rm -rf first-dir
-
- rm -rf ${CVSROOT_DIRNAME}/first-dir ${CVSROOT_DIRNAME}/second-dir
- ;;
-
- binfiles)
- # Test cvs's ability to handle binary files.
- mkdir ${CVSROOT_DIRNAME}/first-dir
- mkdir 1; cd 1
- dotest binfiles-1 "${testcvs} -q co first-dir" ''
- awk 'BEGIN { printf "%c%c%c%c%c%c", 2, 10, 137, 0, 13, 10 }' \
- </dev/null >binfile.dat
- cat binfile.dat binfile.dat >binfile2.dat
- cd first-dir
- cp ../binfile.dat binfile
- dotest binfiles-2 "${testcvs} add -kb binfile" \
- "${PROG}"' [a-z]*: scheduling file `binfile'\'' for addition
- '"${PROG}"' [a-z]*: use '\''cvs commit'\'' to add this file permanently'
- dotest binfiles-3 "${testcvs} -q ci -m add-it" \
- 'RCS file: /tmp/cvs-sanity/cvsroot/first-dir/binfile,v
- done
- Checking in binfile;
- /tmp/cvs-sanity/cvsroot/first-dir/binfile,v <-- binfile
- initial revision: 1.1
- done'
- cd ../..
- mkdir 2; cd 2
- dotest binfiles-4 "${testcvs} -q co first-dir" 'U first-dir/binfile'
- cd first-dir
- dotest binfiles-5 "cmp ../../1/binfile.dat binfile" ''
- # Testing that sticky options is -kb is the closest thing we have
- # to testing that binary files work right on non-unix machines
- # (until there is automated testing for such machines, of course).
- dotest binfiles-5.5 "${testcvs} status binfile" \
- '===================================================================
- File: binfile Status: Up-to-date
-
- Working revision: 1\.1.*
- Repository revision: 1\.1 /tmp/cvs-sanity/cvsroot/first-dir/binfile,v
- Sticky Tag: (none)
- Sticky Date: (none)
- Sticky Options: -kb'
- cp ../../1/binfile2.dat binfile
- dotest binfiles-6 "${testcvs} -q ci -m modify-it" \
- 'Checking in binfile;
- /tmp/cvs-sanity/cvsroot/first-dir/binfile,v <-- binfile
- new revision: 1.2; previous revision: 1.1
- done'
- cd ../../1/first-dir
- dotest binfiles-7 "${testcvs} -q update" '[UP] binfile'
- dotest binfiles-8 "cmp ../binfile2.dat binfile" ''
-
- # The bugs which these test for are apparently not fixed for remote.
- if test "$remote" = no; then
- dotest binfiles-9 "${testcvs} -q update -A" ''
- dotest binfiles-10 "${testcvs} -q update -kk" '[UP] binfile'
- dotest binfiles-11 "${testcvs} -q update" ''
- dotest binfiles-12 "${testcvs} -q update -A" '[UP] binfile'
- dotest binfiles-13 "${testcvs} -q update -A" ''
- fi
-
- cd ../../2/first-dir
- echo 'this file is $''RCSfile$' >binfile
- dotest binfiles-14a "${testcvs} -q ci -m modify-it" \
- 'Checking in binfile;
- /tmp/cvs-sanity/cvsroot/first-dir/binfile,v <-- binfile
- new revision: 1.3; previous revision: 1.2
- done'
- dotest binfiles-14b "cat binfile" 'this file is $''RCSfile$'
- # See binfiles-5.5 for discussion of -kb.
- dotest binfiles-14c "${testcvs} status binfile" \
- '===================================================================
- File: binfile Status: Up-to-date
-
- Working revision: 1\.3.*
- Repository revision: 1\.3 /tmp/cvs-sanity/cvsroot/first-dir/binfile,v
- Sticky Tag: (none)
- Sticky Date: (none)
- Sticky Options: -kb'
- dotest binfiles-14d "${testcvs} admin -kv binfile" \
- 'RCS file: /tmp/cvs-sanity/cvsroot/first-dir/binfile,v
- done'
- # cvs admin doesn't change the checked-out file or its sticky
- # kopts. There probably should be a way which does (but
- # what if the file is modified? And do we try to version
- # control the kopt setting?)
- dotest binfiles-14e "cat binfile" 'this file is $''RCSfile$'
- dotest binfiles-14f "${testcvs} status binfile" \
- '===================================================================
- File: binfile Status: Up-to-date
-
- Working revision: 1\.3.*
- Repository revision: 1\.3 /tmp/cvs-sanity/cvsroot/first-dir/binfile,v
- Sticky Tag: (none)
- Sticky Date: (none)
- Sticky Options: -kb'
- dotest binfiles-14g "${testcvs} -q update -A" '[UP] binfile'
- dotest binfiles-14h "cat binfile" 'this file is binfile,v'
- dotest binfiles-14i "${testcvs} status binfile" \
- '===================================================================
- File: binfile Status: Up-to-date
-
- Working revision: 1\.3.*
- Repository revision: 1\.3 /tmp/cvs-sanity/cvsroot/first-dir/binfile,v
- Sticky Tag: (none)
- Sticky Date: (none)
- Sticky Options: -kv'
-
- cd ../..
- rm -rf ${CVSROOT_DIRNAME}/first-dir
- rm -r 1 2
- ;;
- info)
- # Test CVS's ability to handle *info files.
- dotest info-1 "${testcvs} -q co CVSROOT" "[UP] CVSROOT${DOTSTAR}"
- cd CVSROOT
- echo "ALL sh -c \"echo x\${=MYENV}\${=OTHER}y\${=ZEE}=\$USER=\$CVSROOT= >>$TESTDIR/testlog; cat >/dev/null\"" > loginfo
- dotest info-2 "${testcvs} add loginfo" \
- "${PROG}"' [a-z]*: scheduling file `loginfo'"'"' for addition
- '"${PROG}"' [a-z]*: use '"'"'cvs commit'"'"' to add this file permanently'
- dotest info-3 "${testcvs} -q ci -m new-loginfo" \
- 'RCS file: /tmp/cvs-sanity/cvsroot/CVSROOT/loginfo,v
- done
- Checking in loginfo;
- /tmp/cvs-sanity/cvsroot/CVSROOT/loginfo,v <-- loginfo
- initial revision: 1.1
- done
- '"${PROG}"' [a-z]*: Rebuilding administrative file database'
- cd ..
- if echo "yes" | ${testcvs} release -d CVSROOT >>${LOGFILE} ; then
- pass info-4
- else
- fail info-4
- fi
-
- mkdir ${CVSROOT_DIRNAME}/first-dir
- dotest info-5 "${testcvs} -q co first-dir" ''
- cd first-dir
- touch file1
- dotest info-6 "${testcvs} add file1" \
- "${PROG}"' [a-z]*: scheduling file `file1'\'' for addition
- '"${PROG}"' [a-z]*: use '\''cvs commit'\'' to add this file permanently'
- echo "cvs -s OTHER=not-this -s MYENV=env-" >>$HOME/.cvsrc
- dotest info-6a "${testcvs} -q -s OTHER=value ci -m add-it" \
- 'RCS file: /tmp/cvs-sanity/cvsroot/first-dir/file1,v
- done
- Checking in file1;
- /tmp/cvs-sanity/cvsroot/first-dir/file1,v <-- file1
- initial revision: 1.1
- done
- '"${PROG}"' [a-z]*: loginfo:1: no such user variable ${=ZEE}'
- echo line1 >>file1
- dotest info-7 "${testcvs} -q -s OTHER=value -s ZEE=z ci -m mod-it" \
- 'Checking in file1;
- /tmp/cvs-sanity/cvsroot/first-dir/file1,v <-- file1
- new revision: 1.2; previous revision: 1.1
- done'
- cd ..
- if echo "yes" | ${testcvs} release -d first-dir >>${LOGFILE} ; then
- pass info-8
- else
- fail info-8
- fi
- dotest info-9 "cat $TESTDIR/testlog" 'xenv-valueyz=[a-z@][a-z@]*=/tmp/cvs-sanity/cvsroot='
-
- # I think this might be doable with cvs remove, or at least
- # checking in a version with only comments, but I'm too lazy
- # at the moment. Blow it away.
- rm -f ${CVSROOT_DIRNAME}/CVSROOT/loginfo*
-
- rm -rf ${CVSROOT_DIRNAME}/first-dir
- ;;
- *)
- echo $what is not the name of a test -- ignored
- ;;
- esac
- done
-
- echo "OK, all tests completed."
-
- # TODO:
- # * Test `cvs admin'.
- # * Test `cvs update -d foo' (where foo does not exist).
- # * Test `cvs update foo bar' (where foo and bar are both from the same
- # repository). Suppose one is a branch--make sure that both directories
- # get updated with the respective correct thing.
- # * `cvs update ../foo'. Also ../../foo ./../foo foo/../../bar /foo/bar
- # foo/.././../bar foo/../bar etc.
- # * Test all flags in modules file.
- # Test that ciprog gets run both on checkin in that directory, or a
- # higher-level checkin which recurses into it.
- # * Test that $ followed by "Header" followed by $ gets expanded on checkin.
- # * Test operations on a directory that contains other directories but has
- # no files of its own.
- # * -t global option
- # * cvs rm followed by cvs add or vice versa (with no checkin in between).
- # * cvs rm twice (should be a nice error message).
- # * -P option to checkout--(a) refrains from checking out new empty dirs,
- # (b) prunes empty dirs already there.
- # * Test that cvs -d `hostname`:/tmp/cvs-sanity/non/existent co foo
- # gives an appropriate error (e.g.
- # Cannot access /tmp/cvs-sanity/non-existent/CVSROOT
- # No such file or directory).
- # * Test ability to send notifications in response to watches. (currently
- # hard to test because CVS doesn't send notifications if username is the
- # same).
- # * Test that remote edit and/or unedit works when disconnected from
- # server (e.g. set CVS_SERVER to "foobar").
- # End of TODO list.
-
- # Remove the test directory, but first change out of it.
- cd /tmp
- rm -rf ${TESTDIR}
-
- # end of sanity.sh
-